Skip to content
Snippets Groups Projects
Verified Commit 68aea6a4 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

maj 2023

parent 77af922e
No related branches found
No related tags found
No related merge requests found
......@@ -193,9 +193,11 @@ Le plus petit élément est -9. On commence donc par décaler les valeurs de 9.
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| -9 | -6 | -5 | 1 | 2 | 2 | 4 | 5 | 6 |
* Et alors?
. . .
* The end.
* Et alors rien. C'est fini.
# Pseudo-code
......@@ -250,7 +252,7 @@ rien decaler(entier taille, entier tab[taille], entier val):
```python
rien echanger(entier tab[], entier tab2[])
# échanger les pointeurs vers les tableaux
# échanger les tableaux (sans copier les valeurs)
```
# Un peu plus de détails (2/2)
......@@ -262,7 +264,7 @@ rien alveole_0(entier taille, entier tab[taille],
entier tab_tmp[taille], entier pos):
entier k = 0
pour i de 0 à taille-1:
si git(tab[i], pos):
si bit(tab[i], pos):
tab_tmp[k] = tab[i]
k = k + 1
```
......@@ -274,7 +276,7 @@ rien alveole_0(entier taille, entier tab[taille],
```python
rien alveole_1(entier taille, entier tab[taille],
entier tab_tmp[taille], entier pos):
# pareil que alveole 1 mais en partant de taille
# pareil que alveole_0 mais en partant de taille
```
<!-- ```C
......@@ -389,7 +391,7 @@ Ainsi, la complexité du tri par base est $\mathcal{O}(b\cdot N)$. -->
# Principe de l'algorithme
* Soit `taille` la taille du tableau à trier.
* Pour `i = 0` à `entier(\log_2(taille))-1`:
* Pour `i = 0` à `entier(log2(taille))-1`:
* Fusion des paires de sous-tableaux successifs de taille `2**i` (ou moins pour l'extrémité)
. . .
......@@ -421,33 +423,45 @@ Ainsi, la complexité du tri par base est $\mathcal{O}(b\cdot N)$. -->
# Pseudo-code
```python
rien tri_fusion(entier taille, entier tab[taille]) {
rien tri_fusion(entier taille, entier tab[taille])
entier tab_tmp[taille];
entier nb_etapes = log_2(size) + 1;
pour etape de 0 a nb_etapes - 1:
entier gauche = 0;
entier taille_tranche = 2**etape;
entier t_tranche = 2**etape;
tant que (gauche < taille):
fusion(tab[gauche..gauche+taille_tranche-1], tab[gauche+taille_tranche..gauche+2*taille_tranche-1],
tab_tmp[gauche..gauche+2*taille_tranche-1]); #bornes incluses
gauche += 2*taille_tranche;
fusion(
tab[gauche..gauche+t_tranche-1],
tab[gauche+t_tranche..gauche+2*t_tranche-1],
tab_tmp[gauche..gauche+2*t_tranche-1]);
#bornes incluses
gauche += 2*t_tranche;
echanger(tab, tab_tmp);
```
# La fonction de fusion
\footnotesize
```python
# hyp: tab_g et tab_d sont triés
rien fuction(entier tab_g[], entier tab_d[], entier res[]):
rien fusion(entier tab_g[], entier tab_d[], entier res[]):
entier g = taille(tab_g)
entier d = taille(tab_d)
entier i_g = 0, i_d = 0
pour i = 0 à g + d:
si tab_g[i_g] < tab[i_d]:
si i_g < g et i_d < d:
si tab_g[i_g] < tab[i_d]:
res[i] = tab_g[i_g]
i_g = i_g + 1
sinon:
res[i] = tab_d[i_d]
i_d = i_d + 1
sinon si i_g < g:
res[i] = tab_g[i_g]
i_g = i_g + 1
sinon:
res[i] = tab_g[i_d]
sinon si i_d < d:
res[i] = tab_d[i_d]
i_d = i_d + 1
```
......@@ -600,7 +614,7 @@ int partition(int size, int array[size], int first, int last) {
}
```
# Tri rapide ou quicksort (8/8)
<!-- # Tri rapide ou quicksort (8/8)
## Quelle est la complexité du tri rapide?
......@@ -614,7 +628,7 @@ int partition(int size, int array[size], int first, int last) {
* Chaque fois le tableau est séparé en $2$ parties égales.
* On a $\log_2(N)$ partitions, et $N$ boucles $\Rightarrow N\cdot
\log_2(N)$.
* En moyenne: $\mathcal{O}(N\cdot \log_2(N))$.
* En moyenne: $\mathcal{O}(N\cdot \log_2(N))$. -->
# L'algorithme à la main
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment