debut ecriture algo recursive pivot
This commit is contained in:
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.
+93
-69
@@ -1,48 +1,5 @@
|
||||
#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)
|
||||
{
|
||||
while (a->next)
|
||||
@@ -50,37 +7,104 @@ int last_element(t_stack *a)
|
||||
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;
|
||||
|
||||
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)
|
||||
if (sublist_size(last, *a) > 5)
|
||||
pivot_a_to_b(a, b, solution, last);
|
||||
else
|
||||
{
|
||||
position = match(*a, 4, &value);
|
||||
if (!(*b) || value > (*b)->n)
|
||||
push_to_b(a, b, solution, position);
|
||||
sort_sublist_a(a, b, solution, last);
|
||||
if (sublist_size(last, *b) < 5)
|
||||
send_sublist_to_a(a, b, solution, last);
|
||||
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);
|
||||
pb(b, a, &solution);
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ t_list *launch_algo(t_stack **a, t_stack **b, int flag)
|
||||
if (flag)
|
||||
fill_solution(solution, "start");
|
||||
hugo_sort(a, b, solution);
|
||||
// bubble_sort(a, b, solution);
|
||||
//bubble_sort(a, b, solution);
|
||||
return (solution);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user