On continue donc en considérant le même tableau, en ignorant son dernier élément: 6 2 8 1 5 3 7 0 4 9 De même, on repère l'élément le plus grand en ignorant le dernier et on l'échange avec l'avant dernier: 6 2 4 1 5 3 7 0 8 9 Et ainsi de suite, en ignorant à chaque fois les éléments déjà triés (en gras). 6 2 4 1 5 3 0 7 8 9 0 2 4 1 5 3 6 7 8 9 0 2 4 1 3 5 6 7 8 9 0 2 3 1 4 5 6 7 8 9 0 2 1 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 Et on a enfin trié notre tableau! Implémentation du tri d'un tableau Maintenant que vous connaissez l'algorithme et que vous avez vu sur un exemple son fonctionnement, nous pouvons passer à son implémentation! Tri par extraction dent de sagesse. Mais avant cela, on remarque qu'il est possible de décomposer l'algorithme en plusieurs « sous-fonctions », ce qui facilitera notre travail: La recherche de l'élément le plus grand; L'échange de deux éléments; La réalisation du tri. La fonction max() Le fonctionnement de cette fonction (qui prend en paramètre un tableau et sa taille pour renvoyer l'indice de l'élément le plus grand) est simple: on se contente de parcourir l'intégralité du tableau pour à chaque fois comparer l'élément actuel avec le maximum provisoire.
Au lieu de travailler sur les contenus des cellules de la table, nous
travaillons sur les indices, ainsi lorsque a j
est plus petit que a i nous
mémorisons l'indice "j" du minimum dans une variable " m ¬ j; " plutôt
que le minimum lui-même. A la fin de la boucle interne " pour j de i+1 jusquà n faire " la variable m contient l'indice
de min( a i+1, a k+2,..., a n)
et l'on permute l'élément concerné (d'indice m) avec
l'élément frontière a i:
Algorithme Tri_Selection /Version
2/
a i = Tab[ i]
pour j de i+1 jusquà n faire // ( a i+1,
a 2,..., a n)
j; // indice mémorisé
fpour;
Tab[ m] ¬ Tab[ i];
Tab[ i] ¬ temp //on échange les positions de a i et de a j
D) Complexité:
Choisissons comme opération élémentaire
la comparaison de deux cellules
du tableau. Pour les deux versions 1 et 2:
Le nombre de comparaisons " si Tab[
j] < Tab[ m] alors " est une
valeur qui ne dépend que de la longueur n
de la liste ( n est le nombre d'éléments
du tableau), ce nombre est égal au nombre de fois que les itérations
s'exécutent, le comptage montre que la boucle " pour i de
1 jusquà n-1 faire "
s'exécute n-1 fois (donc une somme de n-1 termes) et qu'à chaque
fois la boucle " pour j de i+1
jusquà n faire " exécute (n-(i+1)+1 fois la comparaison
" si Tab[ j] < Tab[ m] alors ".
Utilisez plutôt son équivalent pour les bases de données: BDMOYENNE. Cette fonction reçoit trois arguments: la base de données ( MaBase), le champ sur lequel porte le calcul, entre guillemets ( " Cotisation "), et enfin le champ de critères, conforme à l'écran ci-dessous (nous l'avons nommé AutreCrit). La formule complète s'écrit donc = BDMOYENNE(MaBase;"Cotisation";AutreCrit).