diff options
Diffstat (limited to 'sorting.c')
| -rw-r--r-- | sorting.c | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -10,9 +10,51 @@ /* */ /* ************************************************************************** */ +#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; +} + + void stack_sort(t_psdata *data) { + int pivot; + int pivot_idx; + + data->cmds = NULL; + pivot_idx = data->a->size - 1; + while (data->b->size || !is_sorted(data->a)) + { + pivot = data->a->stack[pivot_idx]; + while (data->a->size > 0 && data->a->stack[0] != pivot) + { + if (data->a->stack[0] > pivot) + run_command(data, RA); + else + run_command(data, PB); + } + while (data->b->size > 0) + run_command(data, PA); + if (data->a->stack[pivot_idx] == pivot) + pivot_idx--; + if (pivot_idx < 0) + pivot_idx = sdata->a->size - 1; + } + return cmds; } |
