source des comparaisons ci-dessous :
numbers comparisons array-access name
200 19 900 18 448 Bubble Sort
200 20 000 20 384 Cocktail Shaker Sort
200 19 501 19 306 Gnome Sort
200 9 568 18 752 Optimized Gnome Sort
2000 18 308 18 498 Odd-Even Sort
2000 1 999 000 3 998 Selection Sort
2000 2 002 000 4 000 Double Selection Sort
2000 965 671 19 273 364 Insertion Sort
2000 19 201 1 890 122 Binary Insertion Sort
2000 53 378 20 574 Comb Sort
2000 31 948 32 789 Shell Sort
2000 19 423 43 904 Merge Sort
2000 31 048 59 938 Binary Merge
2000 100 955 2 156 938 Weave Merge Sort
2000 19 496 43 039 TimSort
2000 1 993 119 1 930 836 Merge Sort In-Place
2000 31 022 111 758 WikiSort (Block Merge Sort)
2000 22 193 85 044 GrailSort (Block Merge Sort)
2000 30 905 10 510 Quick Sort
2000 26 160 27 488 Stable Quick Sort
2000 24 482 18 852 Dual Pivot Quick Sort
2000 37 841 40 490 Max Heap Sort
2000 37 714 42 206 Min Heap Sort
2000 21 021 26 756 Weak Heap Sort
2000 24 996 27 926 Ternary Heap Sort
2000 50 078 27 803 Smooth Sort
2000 19 410 2 000 Tournament Sort
2000 5 935 671 3 996 Cycle Sort
2000 25 711 16 616 std::sort (Introsort)
2048 33 352 25 109 Quick Shell Sort (Introsort with Shellsort)
2048 19 821 31 652 std::stable sort (Insert/Bottom-up Merge)
2000 58 367 66 296 Batcher's Odd-Even Mergesort
2000 64 832 66 118 Batcher's Bitonic Sort
200 20 099 30 684 Pancake Sort
2000 54 989 2 000 Patience Sort
2000 0 3 973 224 Gravity Sort
2000 0 6 000 Counting Sort
2000 0 4 000 Pigeonhole Sort
2000 0 12 000 Radix LSD Sort (Base 4)
2000 0 4 220 American Flag Sort (128 Buckets)
2048 0 19 207 376 Radix LSD In-Place Sort (Base 10)
2000 0 34 562 144 Radix LSD In-Place Sort (Base 2)
Radix MSD Sort (Base 4)
Radix MSD Sort (Base 2)
Shatter Sort
Simple Shatter Sort
Flash Sort
Time Sort (Mul 4) + Insertion Sort
Stooge Sort
Bad Sort
Silly Sort
Slow Sort
Less Bogo Sort
Cocktail Bogo Sort
Bogo Sort
pour utiliser l'algorithme de tris de ce programme dans votre propre programme, il faut :
-
copier le fichier algo.c
-
mettre son prototype dans votre header.h :
void hugo_sort(t_stack **a, t_stack **b, t_list **solution) -
mettre le fichiers dans vos srcs dans Makefile
-
et verifier que vos functions d'actions (push, swap, rotate) ont bien les meme prototypes :
-
t_list *sa(t_stack **stack, t_list **lst); -
t_list *ss(t_stack **a, t_stack **b, t_list **lst); -
t_list *pa(t_stack **dst, t_stack **src, t_list **lst); -
t_list *pb(t_stack **dst, t_stack **src, t_list **lst); -
t_list *ra(t_stack **stack, t_list **lst); -
t_list *rb(t_stack **stack, t_list **lst); -
t_list *rr(t_stack **a, t_stack **b, t_list **lst); -
t_list *rra(t_stack **stack, t_list **lst); -
t_list *rrb(t_stack **stack, t_list **lst); -
t_list *rrr(t_stack **a, t_stack **b, t_list **lst);
ce programme push_swap.c s'organise de la facon suivante :
- des fonctions pour faire fonctionner l'algorithme de tris (principalement parsing des donnees, et les actions utilisees par l'algorithme de tris : push, swap, rotate et reverse rotate) :
-
push_swap.c : contient la fonction main et 4 autres fonctions :
-
is_valid : verification d'erreur de parsing des listes données
-
check_flag : regarde la presence des flags, pour l'instant uniquement -p pour print les etapes du tri
-
init_stack : qui parse la pile a trier dans une liste chainee
-
launch_algo : la fonction qui lance l'algorithme de tri, en lui envoyant ce qui est necessaire (les deux piles a et b et la liste de solutions)
-
-
stop.c : qui gere les erreurs, l'usage, mais aussi qui free avant de fermer le programme
-
ps_stop : recoit toutes les listes chainees du programme, envoyer NULL si on ne veut pas free la liste, et le dernier int permet de savoir si on veut arreter le programme (>= 0) et si on veut signaler une erreur (> 1)
-
ps_error : la gestion des erreurs
-
ps_usage : en cas d'erreur = 1, affiche l'usage du programme
-
-
print.c : contient les fonctions necessaires pour afficher le resultat
-
print_result : affiche le resultat, et si presence du flag -p affiche aussi les etapes de tris
-
fill_solution : remplit la liste chainee solution au fur et a mesure de l'appel des fonctions push swap et rotate (pas optimisé pour raison de compatibilité avec l'appel des fonctions du programme de luke : les actions (push, swap, etc) ne recoivent pas de flag en argument, donc fill_solution remplis toutes les infos necessaires pour le flag, meme s'il n'y a pas de flag)
-
-
toutes les fonctions d'action (push, swap, rotate, et reverse rotate)
- les fonctions d'algorithme, qui sont appellees par launch_solution()
- hugo_sort : pour l'instant une fonction test qui utilise toutes les actions (push, swap, rotate)