From: Dominik Kaiser Date: Mon, 15 Apr 2024 22:01:47 +0000 (+0200) Subject: Add inefficient quicksort? algorithm X-Git-Url: https://git.dkaiser.de/?a=commitdiff_plain;h=f421b2dcf9a5d12655e48f4a06f35f17e785fb0f;p=42%2Fpush_swap.git Add inefficient quicksort? algorithm This algorithm is based on quicksort but probably not really in its spirit. It is extremely inefficient but could maybe fixed with some post-optimization. --- diff --git a/main.c b/main.c index 803f6eb..076688b 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ /* By: dkaiser 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); } diff --git a/sorting.c b/sorting.c index f04304f..b5668a9 100644 --- a/sorting.c +++ b/sorting.c @@ -6,14 +6,54 @@ /* By: dkaiser 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; }