summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c132
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);
+}