fichiers un peu mieux rangees

This commit is contained in:
hugogogo
2021-09-26 22:29:21 +02:00
parent f07533d101
commit 682be2acbd
11 changed files with 800 additions and 864 deletions

View File

@@ -1,12 +1,5 @@
#include "push_swap.h"
int last_element(t_stack *a)
{
while (a->next)
a = a->next;
return (a->n);
}
// size is initialized to 1 because the loop check the next element, so it will end one step before reaching it
// it checks the next one to avoid handle the first one with ->limit set to 1
int sublist_size(t_stack *list)
@@ -126,778 +119,17 @@ void send_sublist_to_a(t_stack **a, t_stack **b, t_list *solution)
mark_step(solution, "send_sublist_to_a");
}
/*
int find_smallest(t_stack *list, int size)
{
t_stack *head;
int smallest;
int position;
smallest = list->n;
head = list;
while (--size > 0)
{
head = head->next;
if (head->n < smallest)
smallest = head->n;
}
position = 0;
while (list->n != smallest)
{
position++;
list = list->next;
}
return (position);
}
void mini_sort(t_stack **a, t_stack **b, t_list *solution)
{
int list_size;
int next;
int temp;
list_size = sublist_size(*a);
if(list_size == 1)
return ;
(*a)->limit = 0;
while (--list_size > 0)
{
next = find_smallest(*a, list_size + 1);
temp = next;
while (next-- > 0)
ra(a, &solution);
pb(b, a, &solution);
while (temp-- > 0)
rra(a, &solution);
}
list_size = sublist_size(*b);
while (list_size-- > 0)
pa(a, b, &solution);
(*a)->limit = 1;
mark_step(solution, "mini_sort");
}
*/
void mark_sublist(t_stack *list)
{
while (list && list->limit != 1)
{
if (list->limit == 2)
list->limit = 0;
else if (list->limit == 0)
list->limit = 2;
list = list->next;
}
}
int find_smallest(t_stack *list)
{
int i;
int smallest;
int position;
smallest = list->n;
position = 1;
i = 0;
while (list)
{
i++;
if (list->limit == 2 && list->n < smallest)
{
smallest = list->n;
position = i;
}
list = list->next;
}
if (i - position + 1 < position)
position = position - i - 1;
return (position);
}
void sort_big(t_stack **a, t_stack **b, t_list *solution)
{
int list_size;
int next;
int i;
list_size = sublist_size(*a);
mark_sublist(*a);
while (--list_size >= 0)
{
i = 0;
next = find_smallest(*a);
if (next > 0)
while (++i < next)
ra(a, &solution);
else if (next < 0)
while (i-- > next)
rra(a, &solution);
pb(b, a, &solution);
}
list_size = sublist_size(*b);
while (list_size-- > 0)
pa(a, b, &solution);
mark_sublist(*a);
}
int find_rank(t_stack *list, int nbr, int i)
{
t_stack *head;
int comp;
int rank;
int j;
head = list;
j = 0;
while (++j <= nbr - i)
head = head->next;
comp = head->n;
head = list;
j = 0;
rank = 1;
while (++j <= nbr)
{
if (comp > head->n)
rank++;
head = head->next;
}
return (rank);
}
int order_is(t_stack *list, int nbr)
{
int order;
int rank;
int i;
i = 0;
order = 0;
while (++i <= nbr)
{
rank = find_rank(list, nbr, i);
order = order * 10 + rank;
}
return (order);
}
void sort_5(t_stack **a, t_list *solution)
{
int order;
// algos de 5 uniquement necessaires pour trier cette liste :
// 5 10 2 7 65 -12 -3 6 12 28 17 13 54 83 20 11 34 21 67 48
// 48 67 83 54 65 | 21 34 20 17 28 | 11 13 12 7 10 | 6 -3 -12 2 5
// 1 4 5 2 3 | 3 5 2 1 4 | 3 4 5 1 2 | 5 2 1 3 4
order = order_is(*a, 5);
if (order == 12345)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
/*
else if (order == 12354)
else if (order == 12435)
else if (order == 12453)
else if (order == 12534)
else if (order == 12543)
else if (order == 13245)
else if (order == 13254)
else if (order == 13425)
else if (order == 13452)
else if (order == 13524)
else if (order == 13542)
else if (order == 14235)
*/
else if (order == 14253)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
/*
else if (order == 14325)
else if (order == 14352)
else if (order == 14523)
else if (order == 14532)
else if (order == 15234)
else if (order == 15243)
else if (order == 15324)
else if (order == 15342)
else if (order == 15423)
else if (order == 15432)
else if (order == 21345)
else if (order == 21354)
else if (order == 21435)
else if (order == 21453)
else if (order == 21534)
else if (order == 21543)
else if (order == 23145)
else if (order == 23154)
else if (order == 23415)
else if (order == 23451)
else if (order == 23514)
else if (order == 23541)
else if (order == 24135)
else if (order == 24153)
else if (order == 24315)
else if (order == 24351)
else if (order == 24513)
else if (order == 24531)
else if (order == 25134)
else if (order == 25143)
else if (order == 25314)
else if (order == 25341)
else if (order == 25413)
else if (order == 25431)
else if (order == 31245)
else if (order == 31254)
else if (order == 31425)
else if (order == 31452)
else if (order == 31524)
else if (order == 31542)
else if (order == 32145)
else if (order == 32154)
else if (order == 32415)
else if (order == 32451)
else if (order == 32514)
else if (order == 32541)
else if (order == 34125)
else if (order == 34152)
else if (order == 34215)
else if (order == 34251)
*/
else if (order == 34512)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
/*
else if (order == 34521)
else if (order == 35124)
else if (order == 35142)
*/
else if (order == 35214)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
/*
else if (order == 35241)
else if (order == 35412)
else if (order == 35421)
else if (order == 41235)
else if (order == 41253)
else if (order == 41325)
else if (order == 41352)
else if (order == 41523)
else if (order == 41532)
else if (order == 42135)
else if (order == 42153)
else if (order == 42315)
else if (order == 42351)
else if (order == 42513)
else if (order == 42531)
else if (order == 43125)
else if (order == 43152)
else if (order == 43215)
else if (order == 43251)
else if (order == 43512)
else if (order == 43521)
else if (order == 45123)
else if (order == 45132)
else if (order == 45213)
else if (order == 45231)
else if (order == 45312)
else if (order == 45321)
else if (order == 51234)
else if (order == 51243)
else if (order == 51324)
else if (order == 51342)
else if (order == 51423)
else if (order == 51432)
*/
else if (order == 52134)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
/*
else if (order == 52143)
else if (order == 52314)
else if (order == 52341)
else if (order == 52413)
else if (order == 52431)
else if (order == 53124)
else if (order == 53142)
else if (order == 53214)
else if (order == 53241)
else if (order == 53412)
else if (order == 53421)
else if (order == 54123)
else if (order == 54132)
else if (order == 54213)
else if (order == 54231)
else if (order == 54312)
else if (order == 54321)
*/
}
// suite de nombre qui rate le test :
// 4 49 63 8 28 193 103 120 197 188 185 36 133 62 86 126 80 112 131 102 118 145 136 24 5 149 13 7 151 55 61 21 174 116 77 10 33 154 16 47 53 177 165 15 172 12 81 190 186 194 196 50 141 1 67 42 79 170 74 9 117 91 45 158 162 169 83 191 106 180 37 66 110 134 122 30 82 200 89 127 182 71 132 32 35 48 160 69 137 95 38 113 135 173 51 84 199 166 129 150
// 95 89 91 102
// 3 1 2 4
// version complete :
// sa
// a: 200 199 197 196] 194 193 191] 190 188 186] 185 182 180] 177 174 173] 172 170 169] 166 165 162] 160 158 154] 151 150 149 145] 141 137 136] 135 134 133] 132 131 129] 127 126 122] 120 118 117] 116 113 112] 110 106 103] 95 89 102 91
// b: 4 8 28 36 24 5 13 7 21 10 33 16 47 15 12 1 42 9 45 37 30 32 35 48 38] 49 63 62 55 61 53 50 67 66 71 69 51] 80 77 81 79 74 82] 86 83 84]
// ra
// a: 91 200 199 197 196] 194 193 191] 190 188 186] 185 182 180] 177 174 173] 172 170 169] 166 165 162] 160 158 154] 151 150 149 145] 141 137 136] 135 134 133] 132 131 129] 127 126 122] 120 118 117] 116 113 112] 110 106 103] 95 89 102
// b: 4 8 28 36 24 5 13 7 21 10 33 16 47 15 12 1 42 9 45 37 30 32 35 48 38] 49 63 62 55 61 53 50 67 66 71 69 51] 80 77 81 79 74 82] 86 83 84]
// sa
// a: 91 200 199 197 196] 194 193 191] 190 188 186] 185 182 180] 177 174 173] 172 170 169] 166 165 162] 160 158 154] 151 150 149 145] 141 137 136] 135 134 133] 132 131 129] 127 126 122] 120 118 117] 116 113 112] 110 106 103] 95 102 89
// b: 4 8 28 36 24 5 13 7 21 10 33 16 47 15 12 1 42 9 45 37 30 32 35 48 38] 49 63 62 55 61 53 50 67 66 71 69 51] 80 77 81 79 74 82] 86 83 84]
// rra
// a: 200 199 197 196] 194 193 191] 190 188 186] 185 182 180] 177 174 173] 172 170 169] 166 165 162] 160 158 154] 151 150 149 145] 141 137 136] 135 134 133] 132 131 129] 127 126 122] 120 118 117] 116 113 112] 110 106 103] 95 102 89 91
// b: 4 8 28 36 24 5 13 7 21 10 33 16 47 15 12 1 42 9 45 37 30 32 35 48 38] 49 63 62 55 61 53 50 67 66 71 69 51] 80 77 81 79 74 82] 86 83 84]
// rra
// a: 199 197 196] 194 193 191] 190 188 186] 185 182 180] 177 174 173] 172 170 169] 166 165 162] 160 158 154] 151 150 149 145] 141 137 136] 135 134 133] 132 131 129] 127 126 122] 120 118 117] 116 113 112] 110 106 103] 95 102 89 91 200
// b: 4 8 28 36 24 5 13 7 21 10 33 16 47 15 12 1 42 9 45 37 30 32 35 48 38] 49 63 62 55 61 53 50 67 66 71 69 51] 80 77 81 79 74 82] 86 83 84]
// sa ( mini_sort )
// a: 199 197 196] 194 193 191] 190 188 186] 185 182 180] 177 174 173] 172 170 169] 166 165 162] 160 158 154] 151 150 149 145] 141 137 136] 135 134 133] 132 131 129] 127 126 122] 120 118 117] 116 113 112] 110 106 103] 95 102 89 200 91]
// b: 4 8 28 36 24 5 13 7 21 10 33 16 47 15 12 1 42 9 45 37 30 32 35 48 38] 49 63 62 55 61 53 50 67 66 71 69 51] 80 77 81 79 74 82] 86 83 84]
// version raccourcie :
// sa
// a: 200 199 197 196] ...] 95 89 102 91
// b: ...]
// ra
// a: 91 200 199 197 196] ...] 95 89 102
// b: ...]
// sa
// a: 91 200 199 197 196] ...] 95 102 89
// b: ...]
// rra
// a: 200 199 197 196] ...] 95 102 89 91
// b: ...]
// rra
// a: 199 197 196] ...] 95 102 89 91 200
// b: ...]
// sa ( mini_sort )
// a: 199 197 196] ...] 95 102 89 200 91]
// b: ...]
//
// |3124
// s |3142
// r 2|314
// s 2|341
// rr |3412
// rr |3412#
// s |341#2
//
// |3124
// s |3142
// r 2|314
// s 2|341
// r 12|34
// s 12|43
// rr 2|431
// rr |4312
// s |4312
//
void sort_4(t_stack **a, t_list *solution)
{
int order;
order = order_is(*a, 4);
if (order == 1234)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1243)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1324)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1342)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1423)
{
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1432)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 2134)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2143)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2314)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2341)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2413)
{
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2431)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 3124)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 3142)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 3214)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 3241)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 3412)
{
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 3421)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 4123)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 4132)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 4213)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 4231)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 4312)
sa(a, &solution);
}
void sort_3(t_stack **a, t_list *solution)
{
int order;
order = order_is(*a, 3);
if (order == 123)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 132)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 213)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 231)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 312)
sa(a, &solution);
}
void sort_2(t_stack **a, t_list *solution)
{
int order;
order = order_is(*a, 2);
if (order == 12)
sa(a, &solution);
}
void mini_sort(t_stack **a, t_list *solution)
{
int list_size;
list_size = sublist_size(*a);
if(list_size == 1)
return ;
(*a)->limit = 0;
if(list_size == 2)
sort_2(a, solution);
else if(list_size == 3)
sort_3(a, solution);
else if(list_size == 4)
sort_4(a, solution);
else if(list_size == 5)
sort_5(a, solution);
/*
else if(list_size == 6)
sort_6(a, solution);
else
sort_big(a, b, solution);
*/
(*a)->limit = 1;
mark_step(solution, "mini_sort");
}
void hugo_sort(t_stack **a, t_stack **b, t_list *solution)
{
if (sublist_size(*a) > 4)
if (sublist_size(*a) > 5)
divide_a(a, b, solution);
else
{
mini_sort(a, solution);
if (sublist_size(*b) > 3)
// sort_big(a, b, solution)
// mini_sort(a, solution);
minisort(a, solution);
if (sublist_size(*b) > 5)
divide_b(a, b, solution);
else if (sublist_size(*b) > 0)
send_sublist_to_a(a, b, solution);
@@ -907,92 +139,3 @@ void hugo_sort(t_stack **a, t_stack **b, t_list *solution)
hugo_sort(a, b, solution);
}
// /*
// ** 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);
ra(a, &solution);
rra(a, &solution);
pb(b, a, &solution);
pa(a, b, &solution);
sb(b, &solution);
rb(b, &solution);
rrb(b, &solution);
rrr(a, b, &solution);
rr(a, b, &solution);
*/

65
srcs/minisort.c Normal file
View File

@@ -0,0 +1,65 @@
#include "push_swap.h"
int find_biggest(t_stack *list, int size)
{
int biggest;
int position;
int i;
biggest = list->n;
position = 1;
i = 1;
while (list && --size)
{
i++;
list = list->next;
if (biggest < list->n)
{
position = i;
biggest = list->n;
}
}
return (position);
}
void push_biggest(t_stack **list, t_list *solution, int size, int big)
{
t_stack *head;
int i;
head = *list;
i = size;
while (i--)
{
}
}
void minisort(t_stack **list, t_list *solution)
{
int list_size;
int next_big;
list_size = sublist_size(*list);
if(list_size == 1)
return ;
(*list)->limit = 0;
next_big = find_biggest(*list, list_size);
push_biggest(list, solution, list_size, next_big);
(*list)->limit = 1;
mark_step(solution, "minisort");
}
/*
t_stack *test;
test = *list;
int w;
w = list_size;
while (w--)
{
ft_printf("%i ", test->n);
test = test->next;
}
ft_printf("%i\n", next_big);
*/

View File

@@ -0,0 +1,63 @@
#include "push_swap.h"
void mark_sublist(t_stack *list)
{
while (list && list->limit != 1)
{
if (list->limit == 2)
list->limit = 0;
else if (list->limit == 0)
list->limit = 2;
list = list->next;
}
}
int find_smallest(t_stack *list)
{
int i;
int smallest;
int position;
smallest = list->n;
position = 1;
i = 0;
while (list)
{
i++;
if (list->limit == 2 && list->n < smallest)
{
smallest = list->n;
position = i;
}
list = list->next;
}
if (i - position + 1 < position)
position = position - i - 1;
return (position);
}
void sort_big(t_stack **a, t_stack **b, t_list *solution)
{
int list_size;
int next;
int i;
list_size = sublist_size(*a);
mark_sublist(*a);
while (--list_size >= 0)
{
i = 0;
next = find_smallest(*a);
if (next > 0)
while (++i < next)
ra(a, &solution);
else if (next < 0)
while (i-- > next)
rra(a, &solution);
pb(b, a, &solution);
}
list_size = sublist_size(*b);
while (list_size-- > 0)
pa(a, b, &solution);
mark_sublist(*a);
}

632
srcs/minisort_by_rank.c Normal file
View File

@@ -0,0 +1,632 @@
#include "push_swap.h"
int find_rank(t_stack *list, int nbr, int i)
{
t_stack *head;
int comp;
int rank;
int j;
head = list;
j = 0;
while (++j <= nbr - i)
head = head->next;
comp = head->n;
head = list;
j = 0;
rank = 1;
while (++j <= nbr)
{
if (comp > head->n)
rank++;
head = head->next;
}
return (rank);
}
int order_is(t_stack *list, int nbr)
{
int order;
int rank;
int i;
i = 0;
order = 0;
while (++i <= nbr)
{
rank = find_rank(list, nbr, i);
order = order * 10 + rank;
}
return (order);
}
// |12345 |....5
// s |12354 |...5.
// r 4|1235 .|...5
// s 4|1253 .|..5.
// r 34|125 ..|..5
// s 34|152 ..|.5.
// r 34|15 ...|.5
// s 34|51 ...|5.
//
// rr 34|512 ..|5..
// rr 4|5123 .|5...
// rr |51234 |5....
//
// s |51243 |.1243
// r 3|5124 3|.124
// s 3|5142 3|.142
// r 23|514 23|.14
// s 23|541 23|.41
// rr 3|5412 3|.412
// rr |54123 |.4123
// s |54132 |.4132
// r 2|5413 2|.413
// s 2|5431 2|.431
// rr |54312 |.4312
// s |54321 |.4321
//
//
//
// s |1243 |..4.
// r 3|124 .|..4
// s 3|142 .|.4.
// r 23|14 ..|.4
// s 23|41 ..|4.
// rr 3|412 .|4..
// rr |4123 |4...
//
// s |4132 |.132
// r 2|413 2|.13
// s 2|431 2|.31
// rr |4312 |.312
// s |4321 |.321
//
void sort_5(t_stack **a, t_list *solution)
{
int order;
// algos de 5 uniquement necessaires pour trier cette liste :
// 5 10 2 7 65 -12 -3 6 12 28 17 13 54 83 20 11 34 21 67 48
// 48 67 83 54 65 | 21 34 20 17 28 | 11 13 12 7 10 | 6 -3 -12 2 5
// 1 4 5 2 3 | 3 5 2 1 4 | 3 4 5 1 2 | 5 2 1 3 4
order = order_is(*a, 5);
if (order == 12345)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
/*
else if (order == 12354)
else if (order == 12435)
else if (order == 12453)
else if (order == 12534)
else if (order == 12543)
else if (order == 13245)
else if (order == 13254)
else if (order == 13425)
else if (order == 13452)
else if (order == 13524)
else if (order == 13542)
else if (order == 14235)
*/
else if (order == 14253)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
/*
else if (order == 14325)
else if (order == 14352)
else if (order == 14523)
else if (order == 14532)
else if (order == 15234)
else if (order == 15243)
else if (order == 15324)
else if (order == 15342)
else if (order == 15423)
else if (order == 15432)
else if (order == 21345)
else if (order == 21354)
else if (order == 21435)
else if (order == 21453)
else if (order == 21534)
else if (order == 21543)
else if (order == 23145)
else if (order == 23154)
else if (order == 23415)
else if (order == 23451)
else if (order == 23514)
else if (order == 23541)
else if (order == 24135)
else if (order == 24153)
else if (order == 24315)
else if (order == 24351)
else if (order == 24513)
else if (order == 24531)
else if (order == 25134)
else if (order == 25143)
else if (order == 25314)
else if (order == 25341)
else if (order == 25413)
else if (order == 25431)
else if (order == 31245)
else if (order == 31254)
else if (order == 31425)
else if (order == 31452)
else if (order == 31524)
else if (order == 31542)
else if (order == 32145)
else if (order == 32154)
else if (order == 32415)
else if (order == 32451)
else if (order == 32514)
else if (order == 32541)
else if (order == 34125)
else if (order == 34152)
else if (order == 34215)
else if (order == 34251)
*/
else if (order == 34512)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
/*
else if (order == 34521)
else if (order == 35124)
else if (order == 35142)
*/
else if (order == 35214)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
/*
else if (order == 35241)
else if (order == 35412)
else if (order == 35421)
else if (order == 41235)
else if (order == 41253)
else if (order == 41325)
else if (order == 41352)
else if (order == 41523)
else if (order == 41532)
else if (order == 42135)
else if (order == 42153)
else if (order == 42315)
else if (order == 42351)
else if (order == 42513)
else if (order == 42531)
else if (order == 43125)
else if (order == 43152)
else if (order == 43215)
else if (order == 43251)
else if (order == 43512)
else if (order == 43521)
else if (order == 45123)
else if (order == 45132)
else if (order == 45213)
else if (order == 45231)
else if (order == 45312)
else if (order == 45321)
else if (order == 51234)
else if (order == 51243)
else if (order == 51324)
else if (order == 51342)
else if (order == 51423)
else if (order == 51432)
*/
else if (order == 52134)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
/*
else if (order == 52143)
else if (order == 52314)
else if (order == 52341)
else if (order == 52413)
else if (order == 52431)
else if (order == 53124)
else if (order == 53142)
else if (order == 53214)
else if (order == 53241)
else if (order == 53412)
else if (order == 53421)
else if (order == 54123)
else if (order == 54132)
else if (order == 54213)
else if (order == 54231)
else if (order == 54312)
else if (order == 54321)
*/
}
void sort_4(t_stack **a, t_list *solution)
{
int order;
order = order_is(*a, 4);
if (order == 1234)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1243)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1324)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1342)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1423)
{
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 1432)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 2134)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2143)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2314)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2341)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2413)
{
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 2431)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 3124)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 3142)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 3214)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 3241)
{
ra(a, &solution);
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 3412)
{
sa(a, &solution);
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 3421)
{
ra(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
rra(a, &solution);
}
else if (order == 4123)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 4132)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 4213)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 4231)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 4312)
sa(a, &solution);
}
void sort_3(t_stack **a, t_list *solution)
{
int order;
order = order_is(*a, 3);
if (order == 123)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 132)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
sa(a, &solution);
}
else if (order == 213)
{
sa(a, &solution);
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 231)
{
ra(a, &solution);
sa(a, &solution);
rra(a, &solution);
}
else if (order == 312)
sa(a, &solution);
}
void sort_2(t_stack **a, t_list *solution)
{
int order;
order = order_is(*a, 2);
if (order == 12)
sa(a, &solution);
}
void mini_sort(t_stack **a, t_list *solution)
{
int list_size;
list_size = sublist_size(*a);
if(list_size == 1)
return ;
(*a)->limit = 0;
if(list_size == 2)
sort_2(a, solution);
else if(list_size == 3)
sort_3(a, solution);
else if(list_size == 4)
sort_4(a, solution);
else if(list_size == 5)
sort_5(a, solution);
/*
else if(list_size == 6)
sort_6(a, solution);
else
sort_big(a, b, solution);
*/
(*a)->limit = 1;
mark_step(solution, "mini_sort");
}