create put at index asc and desc

This commit is contained in:
whaffman 2024-11-17 13:25:59 +01:00
parent 2c3769be68
commit 7f5de6c4fd
4 changed files with 29 additions and 54 deletions

View File

@ -70,8 +70,8 @@ int main(int argc, char *argv[])
return (1); return (1);
} }
} }
ft_printf("min: %d\n", stack_min(state->a)); // ft_printf("min: %d\n", stack_min(state->a));
ft_printf("max: %d\n", stack_max(state->a)); // ft_printf("max: %d\n", stack_max(state->a));
sort5(state); sort5(state);
print_state(state); print_state(state);
return (0); return (0);

View File

@ -30,19 +30,12 @@ int sort3(t_state *state)
return (0); return (0);
if (a < b && b < c) if (a < b && b < c)
return (1); return (1);
else if (a < b && b > c) else if (a < b && b > c && a < c)
{ {
rra(state); rra(state);
if (a < c)
sa(state); sa(state);
} }
else if (a > c && b < c) else if (!(a > c && b < c))
ra(state);
else
{
sa(state); sa(state);
if (b > c)
rra(state);
}
return (1); return (1);
} }

View File

@ -39,6 +39,5 @@ int sort5(t_state *state)
merge_to_a(state); merge_to_a(state);
merge_to_a(state); merge_to_a(state);
rotate_a_to_top(state); rotate_a_to_top(state);
return (1); return (1);
} }

View File

@ -10,6 +10,7 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "libft.h"
#include "push_swap.h" #include "push_swap.h"
int shortest_rotate(int index, int size) int shortest_rotate(int index, int size)
@ -75,52 +76,34 @@ int ft_min(int a, int b)
return (b); return (b);
} }
int put_at_index_desc(int number, t_list *stack) int count_gt(int n, t_list *stack)
{ {
int i; int count;
i = 0; count = 0;
if (number < stack_min(stack) || number > stack_max(stack)) while (stack)
i = ft_min(
index_of(stack_min(stack), stack),
index_of(stack_max(stack), stack));
else
{ {
while (number < *(int *) ft_lstat(stack, i)->content) if (*(int *) stack->content > n)
i++; count++;
while (number < *(int *) ft_lstat(stack, i)->content stack = stack->next;
&& number < *(int *) ft_lstat(stack, i + 1)->content
&& i < ft_lstsize(stack))
{
i++;
} }
ft_printf("%d\n", i); return (count);
}
if (i == ft_lstsize(stack))
return (0);
return (i);
} }
int put_at_index_asc(int number, t_list *stack) int put_at_index_asc(int number, t_list *stack)
{ {
int i; const int i = index_of(stack_min(stack), stack);
const int size = ft_lstsize(stack);
const int gt = count_gt(number, stack);
i = 0; return ((i + gt) % size);
if (number < stack_min(stack) || number > stack_max(stack)) }
i = index_of(stack_min(stack), stack);
else int put_at_index_desc(int number, t_list *stack)
{ {
while (number < *(int *) ft_lstat(stack, i)->content) const int i = index_of(stack_max(stack), stack);
i++; const int size = ft_lstsize(stack);
while (i + 1 < ft_lstsize(stack) const int lt = size - count_gt(number, stack);
&&number > *(int *) ft_lstat(stack, i)->content
&& number > *(int *) ft_lstat(stack, i + 1)->content) return ((i + lt) % size);
{
i++;
}
i++;
}
if (i == ft_lstsize(stack))
return (0);
return (i);
} }