/*
sort_stack Copyright (C) 2026 yctct
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
#include "../include/push_swap.h"
#include
int is_sorted(t_list *stack)
{
t_list *current;
t_list *second;
// t_list *next;
current = stack;
//next = stack->next;
while (current)
{
second = current->next;
while (second)
{
if (current->value > second->value)
return (0);
second = second->next;
}
current = current->next;
}
return (1);
}
void *init_stack(char **array)
{
t_list *node;
long number;
int index_count;
t_list *stack;
stack = NULL;
index_count = 0;
while (array[index_count])
index_count++;
while (index_count > 0)
{
number = ft_atoi(array[index_count - 1]);
node = malloc(sizeof(t_list));
if (!node)
return (NULL);
node->value = number;
node->index = (index_count - 1);
node->next = stack;
stack = node;
index_count--;
}
return (stack);
}
t_list *convert_string(char *s, t_list *src)
{
char **array;
array = ft_split(s, ' ');
if (array == NULL)
return (NULL);
if (array[0] == NULL)
{
free_array(array);
return (NULL);
}
if (!is_valid_int(array))
{
free_array(array);
puterror(src);
}
src = init_stack(array);
free_array(array);
check_errors(src);
return (src);
}
void select_sort(t_list *src)
{
if (ft_lstsize(src) < 3)
sort_two(&src);
else if (ft_lstsize(src) < 4)
sort_three(&src);
else if (ft_lstsize(src) < 6)
sort_five(&src);
else
sort(&src);
free_stack(src);
}
int main(int argc, char **argv)
{
t_list *src;
src = NULL;
if (argc == 1)
return (0);
if (argc == 2)
{
src = convert_string(argv[1], src);
if (src == NULL)
{
free(src);
return (0);
}
}
else
{
if (!is_valid_int(&argv[1]))
puterror(src);
src = init_stack(&argv[1]);
check_errors(src);
}
if (is_sorted(src))
return (free_stack(src), 0);
select_sort(src);
}