[source des comparaisons ci-dessous :](https://www.youtube.com/watch?v=xoR-1KwQh2k) 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 : 1. copier le fichier algo.c 2. mettre son prototype dans votre header.h : `void hugo_sort(t_stack **a, t_stack **b, t_list **solution)` 3. mettre le fichiers dans vos srcs dans Makefile 4. 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 : 1. 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) 2. 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)