debut ecriture algo recursive pivot

This commit is contained in:
hugogogo
2021-09-23 13:37:14 +02:00
parent 37b1daa814
commit 8f70063f29
13 changed files with 95 additions and 71 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

2
libft
View File

@@ -1 +1 @@
../libft ../../libft

BIN
push_swap

Binary file not shown.

View File

@@ -1,48 +1,5 @@
#include "push_swap.h" #include "push_swap.h"
/*
** n is the nbr of elements of the list that are competiting
** position start at 0, ie position 3 is the 4th element
*/
int match(t_stack *a, int n, int *smaller)
{
int position;
int i;
*smaller = a->n;
position = 0;
i = 1;
while (a->next && i < n)
{
a = a->next;
if (a->n < *smaller)
{
*smaller = a->n;
position = i;
}
i++;
}
return (position);
}
void nb_to_top(t_stack **a, t_list *solution, int i)
{
int n;
if (!i)
return ;
n = i;
while (--n)
ra(a, &solution);
n = i;
sa(a, &solution);
while (--n)
{
rra(a, &solution);
sa(a, &solution);
}
}
int last_element(t_stack *a) int last_element(t_stack *a)
{ {
while (a->next) while (a->next)
@@ -50,37 +7,104 @@ int last_element(t_stack *a)
return (a->n); return (a->n);
} }
void push_to_b(t_stack **a, t_stack **b, t_list *solution, int position) void recursive(t_stack **a, t_stack **b, t_list *solution, int last)
{ {
int i; if (sublist_size(last, *a) > 5)
pivot_a_to_b(a, b, solution, last);
i = position; else
while (i--)
ra(a, &solution);
pb(b, a, &solution);
while (++i < position)
rra(a, &solution);
}
/*
** so far it's bullshit :p
*/
void hugo_sort(t_stack **a, t_stack **b, t_list *solution)
{
int last;
int position;
int value;
last = last_element(*a);
while ((*a)->n != last)
{ {
position = match(*a, 4, &value); sort_sublist_a(a, b, solution, last);
if (!(*b) || value > (*b)->n) if (sublist_size(last, *b) < 5)
push_to_b(a, b, solution, position); send_sublist_to_a(a, b, solution, last);
else else
ra(a, &solution); pivot_b_to_a(a, b, solution, last);
} }
} }
void hugo_sort(t_stack **a, t_stack **b, t_list *solution)
{
(void)solution;
(void)b;
int last;
last = last_element(*a);
recursive(*a, *b, solution, last);
}
// /*
// ** n is the nbr of elements of the list that are competiting
// ** position start at 0, ie position 3 is the 4th element
// */
// int match(t_stack *a, int n, int *smaller)
// {
// int position;
// int i;
//
// *smaller = a->n;
// position = 0;
// i = 1;
// while (a->next && i < n)
// {
// a = a->next;
// if (a->n < *smaller)
// {
// *smaller = a->n;
// position = i;
// }
// i++;
// }
// return (position);
// }
//
// void nb_to_top(t_stack **a, t_list *solution, int i)
// {
// int n;
//
// if (!i)
// return ;
// n = i;
// while (--n)
// ra(a, &solution);
// n = i;
// sa(a, &solution);
// while (--n)
// {
// rra(a, &solution);
// sa(a, &solution);
// }
// }
//
// void push_to_b(t_stack **a, t_stack **b, t_list *solution, int position)
// {
// int i;
//
// i = position;
// while (i--)
// ra(a, &solution);
// pb(b, a, &solution);
// while (++i < position)
// rra(a, &solution);
// }
//
// /*
// ** so far it's bullshit :p
// */
// void hugo_sort(t_stack **a, t_stack **b, t_list *solution)
// {
// int last;
// int position;
// int value;
//
// last = last_element(*a);
// while ((*a)->n != last)
// {
// position = match(*a, 4, &value);
// if (!(*b) || value > (*b)->n)
// push_to_b(a, b, solution, position);
// else
// ra(a, &solution);
// }
// }
/* /*
sa(a, &solution); sa(a, &solution);
pb(b, a, &solution); pb(b, a, &solution);

View File

@@ -48,7 +48,7 @@ t_list *launch_algo(t_stack **a, t_stack **b, int flag)
if (flag) if (flag)
fill_solution(solution, "start"); fill_solution(solution, "start");
hugo_sort(a, b, solution); hugo_sort(a, b, solution);
// bubble_sort(a, b, solution); //bubble_sort(a, b, solution);
return (solution); return (solution);
} }