diff options
| author | Dominik Kaiser | 2024-04-16 17:59:00 +0200 |
|---|---|---|
| committer | Dominik Kaiser | 2024-04-16 17:59:00 +0200 |
| commit | 5f3cc5b96b8b30a46051081403a6ac9210aee6af (patch) | |
| tree | 8668e929ec00454951752ff5fb287596a6379ec7 | |
| parent | 571c2f537954fd0d5deb616380276d1d23049aa9 (diff) | |
| download | push_swap-5f3cc5b96b8b30a46051081403a6ac9210aee6af.tar.gz push_swap-5f3cc5b96b8b30a46051081403a6ac9210aee6af.zip | |
Add radixsort for new data system
| -rw-r--r-- | sorting.c | 42 |
1 files changed, 40 insertions, 2 deletions
@@ -6,13 +6,51 @@ /* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/13 15:04:19 by dkaiser #+# #+# */ -/* Updated: 2024/04/16 09:27:53 by dkaiser ### ########.fr */ +/* Updated: 2024/04/16 17:54:16 by dkaiser ### ########.fr */ /* */ /* ************************************************************************** */ +#include "libft/ft_printf.h" #include "push_swap.h" -void stack_sort(t_psdata *data) +static 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; +} + +static void radixsort(t_psdata *data, int bit) { + int i; + int size; + i = 0; + size = data->a->size; + while (i < size) + { + if (data->a->size && ((data->a->stack[0] >> bit) & 1) == 0) + run_command(data, PB); + else if (data->a->size > 1) + run_command(data, RA); + i++; + } + while (data->b->size > 0) + run_command(data, PA); + if (!is_sorted(data->a)) + radixsort(data, bit + 1); +} + +void stack_sort(t_psdata *data) +{ + radixsort(data, 0); } |
