Push Swap

This commit is contained in:
Angel Ortigosa Perez
2025-09-08 14:02:27 +02:00
commit 31f2054f1c
16 changed files with 1036 additions and 0 deletions

79
sort.c Normal file
View File

@@ -0,0 +1,79 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* sort.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: aortigos <aortigos@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/14 05:58:30 by aortigos #+# #+# */
/* Updated: 2024/08/14 06:30:25 by aortigos ### ########.fr */
/* */
/* ************************************************************************** */
#include "push_swap.h"
static void push_init(t_stack **stack_a, t_stack **stack_b)
{
int stack_size;
int push;
int i;
push = 0;
i = 0;
stack_size = get_stack_size(*stack_a);
while (stack_size < 6 && i < stack_size && push < stack_size / 2)
{
if ((*stack_a)->index <= stack_size / 2)
{
ft_pb(stack_a, stack_b);
push++;
}
else
ft_ra(stack_a);
i++;
}
while (stack_size - push > 3)
{
ft_pb(stack_a, stack_b);
push++;
}
}
static void sort_stack(t_stack **stack_a)
{
int lowest_p;
int stack_size;
stack_size = get_stack_size(*stack_a);
lowest_p = position_lowest_index(stack_a);
if (lowest_p > stack_size / 2)
{
while (lowest_p < stack_size)
{
ft_rra(stack_a);
lowest_p++;
}
}
else
{
while (lowest_p > 0)
{
ft_ra(stack_a);
lowest_p--;
}
}
}
void sort(t_stack **stack_a, t_stack **stack_b)
{
push_init(stack_a, stack_b);
three_sort(stack_a);
while (*stack_b)
{
get_target_position(stack_a, stack_b);
cost(stack_a, stack_b);
cheapest_move(stack_a, stack_b);
}
if (!is_sorted(*stack_a))
sort_stack(stack_a);
}