diff options
Diffstat (limited to 'sorting.c')
| -rw-r--r-- | sorting.c | 22 |
1 files changed, 20 insertions, 2 deletions
@@ -6,7 +6,7 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/13 15:04:19 by dkaiser #+# #+# */ -/* Updated: 2024/04/26 13:54:26 by dkaiser ### ########.fr */ +/* Updated: 2024/04/26 18:35:27 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,18 @@ static int is_sorted(t_stack *stack) return (1); } +static void sort_three(t_psdata *data) +{ + if (data->a->stack[1] > data->a->stack[0] + && data->a->stack[1] > data->a->stack[2]) + run_command(data, RRA); + else if (data->a->stack[0] > data->a->stack[1] + && data->a->stack[0] > data->a->stack[2]) + run_command(data, RA); + if (data->a->stack[0] > data->a->stack[1]) + run_command(data, SA); +} + static void ps_radixsort(t_psdata *data, int bit) { int i; @@ -51,6 +63,12 @@ static void ps_radixsort(t_psdata *data, int bit) void stack_sort(t_psdata *data) { - if (!is_sorted(data->a)) + if (is_sorted(data->a)) + return ; + else if (data->a->size == 2) + run_command(data, SA); + else if (data->a->size == 3) + sort_three(data); + else ps_radixsort(data, 0); } |
