114 lines
6.1 KiB
Markdown
114 lines
6.1 KiB
Markdown
|
|
[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)
|
|
|
|
|
|
|
|
|