/* 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); }