From 61926f8658cddccf59b84be222f48edc1e7b8718 Mon Sep 17 00:00:00 2001 From: Dominik Kaiser Date: Sat, 27 Apr 2024 16:30:16 +0200 Subject: Add sorting for small stacks --- sort_few.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 sort_few.c (limited to 'sort_few.c') diff --git a/sort_few.c b/sort_few.c new file mode 100644 index 0000000..40bc030 --- /dev/null +++ b/sort_few.c @@ -0,0 +1,95 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sort_few.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: dkaiser 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 int get_min_pos(t_stack *stack) +{ + int i; + int min; + + i = 0; + min = 2147483647; + while (i < stack->size) + { + if (stack->stack[i] < min) + min = stack->stack[i]; + i++; + } + i = 0; + while (stack->stack[i] != min) + i++; + return (i); +} + +static void rotate_a_n(t_psdata *data, int n) +{ + if (n < (data->a->size + 1) / 2) + { + while (n--) + run_command(data, RA); + } + else + { + n = data->a->size - n; + while (n--) + run_command(data, RRA); + } +} + +static void reinsert_nbrs(t_psdata *data) +{ + int i; + + while (data->b->size > 0) + { + if (data->b->stack[0] >= data->a->size) + { + run_command(data, PA); + run_command(data, RA); + } + else + { + i = 0; + while (i < data->a->size && data->b->stack[0] > data->a->stack[i]) + i++; + rotate_a_n(data, i); + run_command(data, PA); + if (data->a->stack[0] != data->b->stack[0] - 1) + rotate_a_n(data, get_min_pos(data->a)); + } + } +} + +void sort_few(t_psdata *data) +{ + if (data->a->stack[0] == data->a->size - 1) + run_command(data, RA); + while (data->a->size > 3) + run_command(data, PB); + if (data->b->stack[0] > data->b->stack[1]) + run_command(data, SB); + sort_three(data); + reinsert_nbrs(data); +} -- cgit v1.2.3