]> git.dkaiser.de - 42/push_swap.git/commitdiff
Try again to add this algorithm
authorDominik Kaiser <dominik@dominik-XPS.fritz.box>
Mon, 15 Apr 2024 22:15:03 +0000 (00:15 +0200)
committerDominik Kaiser <dominik@dominik-XPS.fritz.box>
Mon, 15 Apr 2024 22:15:03 +0000 (00:15 +0200)
Hopefully this time I put it in the correct branch.

main.c
sorting.c

diff --git a/main.c b/main.c
index 803f6eb6b974e2369adab2a4c0cc8efab15c09f7..076688b659a43d0ed7685571e855a4c12013f264 100644 (file)
--- a/main.c
+++ b/main.c
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/04/12 17:03:30 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/04/15 17:53:19 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/04/15 23:41:34 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -39,11 +39,11 @@ int main(int argc, char *argv[])
        stack_b->size = 0;
        stack_optimize(stack_a);
        pscmds = stack_sort(stack_a, stack_b);
-       /* optimize_commands(&pscmds); */
+       optimize_commands(&pscmds);
        print_commands(pscmds);
-       ft_printf("\nA: ");
-       stack_print(stack_a);
-       ft_printf("B: ");
-       stack_print(stack_b);
+       /* ft_printf("\nA: "); */
+       /* stack_print(stack_a); */
+       /* ft_printf("B: "); */
+       /* stack_print(stack_b); */
        return (0);
 }
index f04304f16aba2817388e35b7d07400a99fc223cb..b5668a941cadb4da4ed8991f9b38b0841e5363a7 100644 (file)
--- a/sorting.c
+++ b/sorting.c
@@ -6,14 +6,54 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/04/13 15:04:19 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/04/15 17:54:23 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/04/15 23:39:57 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
+#include "libft/ft_printf.h"
+#include "libft/libft.h"
 #include "push_swap.h"
 
+int is_sorted(t_stack *stack)
+{
+    int i;
+
+    if (stack->size < 2)
+        return 1;
+    i = 1;
+    while (i < stack->size)
+    {
+        if (stack->stack[i] < stack->stack[i-1])
+            return 0;
+        i++;
+    }
+    return 1;
+}
+
 
 t_list *stack_sort(t_stack *stack_a, t_stack *stack_b)
 {
-    return NULL;
+    t_list *cmds = NULL;
+    int pivot;
+
+    int pivot_idx = stack_a->size - 1;
+    while (stack_b->size || !is_sorted(stack_a))
+    {
+        pivot = stack_a->stack[pivot_idx];
+
+        while (stack_a->size > 0 && stack_a->stack[0] != pivot)
+        {
+            if (stack_a->stack[0] > pivot)
+                run_command(stack_a, stack_b, &cmds, RA);
+            else
+                run_command(stack_a, stack_b, &cmds, PB);
+        }
+        while (stack_b->size > 0)
+            run_command(stack_a, stack_b, &cmds, PA);
+        if (stack_a->stack[pivot_idx] == pivot)
+            pivot_idx--;
+        if (pivot_idx < 0)
+            pivot_idx = stack_a->size - 1;
+    }
+    return cmds;
 }