/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* sorting.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* 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) { 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; }