fichiers un peu mieux rangees
This commit is contained in:
5
Makefile
5
Makefile
@@ -27,7 +27,10 @@ SRCS = push_swap.c \
|
|||||||
push.c \
|
push.c \
|
||||||
rotate.c \
|
rotate.c \
|
||||||
reverse_rotate.c \
|
reverse_rotate.c \
|
||||||
algo_bubble_sort.c
|
algo_bubble_sort.c \
|
||||||
|
minisort.c \
|
||||||
|
minisort_by_rank.c \
|
||||||
|
minisort_2ways_bubble_sort.c
|
||||||
|
|
||||||
|
|
||||||
ODIR = ./builds
|
ODIR = ./builds
|
||||||
|
|||||||
BIN
builds/algo.o
BIN
builds/algo.o
Binary file not shown.
BIN
builds/minisort.o
Normal file
BIN
builds/minisort.o
Normal file
Binary file not shown.
BIN
builds/minisort_2ways_bubble_sort.o
Normal file
BIN
builds/minisort_2ways_bubble_sort.o
Normal file
Binary file not shown.
BIN
builds/minisort_by_rank.o
Normal file
BIN
builds/minisort_by_rank.o
Normal file
Binary file not shown.
@@ -37,8 +37,38 @@ void ps_stop(t_stack *stack, t_list *lst, int i);
|
|||||||
/*
|
/*
|
||||||
** algo.c
|
** algo.c
|
||||||
*/
|
*/
|
||||||
|
int sublist_size(t_stack *list);
|
||||||
|
int nbr_element_smaller(t_stack *list, int size, int pivot);
|
||||||
|
int find_pivot(t_stack *list, int size);
|
||||||
|
int divide_a(t_stack **a, t_stack **b, t_list *solution);
|
||||||
|
int divide_b(t_stack **a, t_stack **b, t_list *solution);
|
||||||
|
void send_sublist_to_a(t_stack **a, t_stack **b, t_list *solution);
|
||||||
void hugo_sort(t_stack **a, t_stack **b, t_list *lst);
|
void hugo_sort(t_stack **a, t_stack **b, t_list *lst);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** minisort.c
|
||||||
|
*/
|
||||||
|
int find_biggest(t_stack *list, int size);
|
||||||
|
void minisort(t_stack **list, t_list *solution);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** minisort_by_rank.c
|
||||||
|
*/
|
||||||
|
int find_rank(t_stack *list, int nbr, int i);
|
||||||
|
int order_is(t_stack *list, int nbr);
|
||||||
|
void sort_5(t_stack **a, t_list *solution);
|
||||||
|
void sort_4(t_stack **a, t_list *solution);
|
||||||
|
void sort_3(t_stack **a, t_list *solution);
|
||||||
|
void sort_2(t_stack **a, t_list *solution);
|
||||||
|
void mini_sort(t_stack **a, t_list *solution);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** minisort_2ways_bubble_sort.c
|
||||||
|
*/
|
||||||
|
void mark_sublist(t_stack *list);
|
||||||
|
int find_smallest(t_stack *list);
|
||||||
|
void sort_big(t_stack **a, t_stack **b, t_list *solution);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** print.c
|
** print.c
|
||||||
*/
|
*/
|
||||||
|
|||||||
869
srcs/algo.c
869
srcs/algo.c
@@ -1,12 +1,5 @@
|
|||||||
#include "push_swap.h"
|
#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
|
// 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
|
// it checks the next one to avoid handle the first one with ->limit set to 1
|
||||||
int sublist_size(t_stack *list)
|
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");
|
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)
|
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);
|
divide_a(a, b, solution);
|
||||||
else
|
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);
|
divide_b(a, b, solution);
|
||||||
else if (sublist_size(*b) > 0)
|
else if (sublist_size(*b) > 0)
|
||||||
send_sublist_to_a(a, b, solution);
|
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);
|
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
65
srcs/minisort.c
Normal 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);
|
||||||
|
*/
|
||||||
|
|
||||||
63
srcs/minisort_2ways_bubble_sort.c
Normal file
63
srcs/minisort_2ways_bubble_sort.c
Normal 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
632
srcs/minisort_by_rank.c
Normal 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");
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user