diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..a00d8c9 --- /dev/null +++ b/src/main.c @@ -0,0 +1,132 @@ +/* +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 <https://www.gnu.org/licenses/>. +*/ + + +#include "../include/push_swap.h" +#include <stdlib.h> + +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); +} |
