Les algorithmes de tri


Il faut trier les informations pour pouvoir ensuite y accéder + rapidement / facilement. Il existe de nombreux algorithmes de tri

l) LE TRI PAR SÉLECTION

Le tri par sélection est la méthode la plus intuitive de tri sans ordinateur. On cherche la valeur la plus petite du tableau, on la recopie dans la première case de notre tableau et on l'élimine du tableau de départ puis on repère la valeur la plus petite restante, etc ...


PHOTO JPEG USB « tri »

Pour n'avoir à utiliser qu'un seul tableau, on peut placer la valeur la plus petite dans la première case et décaler les autres valeurs et ainsi de suite.

Pour ne pas perdre de valeurs, il faut utiliser une variable de stockage intermédiaire dans laquelle on placera le 11 avant qu'il ne remplace le 42.

ll) TRI PAR FUSION

Cet algorithme divise le tableau principal en tableaux plus petits qui sont triés puis fusionnés

exemple : 42'63'32'14 devient 42 63'14 32 (nombre le + petit des deux devant)

Les petits sous-tableaux triés sont fusionnés deux à deux, puis de nouveau fusionnés avec des tableaux à 4 valeurs, etc...

Cet algorithme est + facile, surtout s'il est programmé de manière récursive.

Une fonction récursive s'appelle elle-même pendant l'exécution du programme.

lll)PROGRAMMATION DE TRI SOUS PROCESSING

1)Tri par sélection

void setup() { // fonction ne prenant pas de paramètre, s'exécutant qu'une seule fois au début du programme et ne renvoie aucune valeur au reste du programme, les fonctions sont en bleu sur Processing, mots clés en vert sur Processing. Processing exécute automatiquement la fonction Setup. Ce n'est pas une instruction (elle n'a pas de ; )

int i, j, k, z; // instruction (;) qui déclare 4 variables entières nommées i j k z

int [] tab = new int [16]; // instruction de déclaration d'un tableau nommé «tab» d'entiers à 16 valeurs, numérotée de 0 à 15

for (i = 0; i <= 15; i = i + 1) { //boucle qui s'exécute 16 fois où i est le compteur de boucle, i variant de 0 à 15, i est incrémenté de 1 à chaque tour de boucle (on le voit avec i=i+1)

tab[i] = (int)Math.floor(Math.random() * 1000); // affectation d'un entier aléatoire compris entre 0 et 999, dans la case i du tableau. Le (int) : transforme un nombre décimal en nombre entier. Random : fonction revoyant à une variable aléatoire entre 0 et 1. Floor est une fonction renvoyant à la partie entière du nombre aléatoire de la fonction random. « Math » indique juste que c'est une fonction mathématique

}

for (i = 0; i <= 15; i = i + 1) {

print(tab[i] + " "); //écrit sur la console sur une même ligne le contenu de la case i tu tableau puis un espace

}

System.out.println(); // instruction retour à la ligne

for (i = 0; i <= 14; i = i + 1) {

k = i;

for (j = i + 1; j <= 15; j = j + 1) {

if (tab[j] <= tab[k]) { //une condition (« if »), avec un booléen qui est vrai si le contenu de la case j est plus petit ou égal au contenu de la case k

k = j;

}

}

z = tab[i];

tab[i] = tab[k];

tab[k] = z;

}

for (i = 0; i <= 15; i = i + 1) {

print(tab[i] + " ");

}

System.out.println();

}

Ce programme n'a pas de fonction DRAW car l'algorithme ne doit s'exécuter qu'une fois, la fonction Setup suffit.

2)Tri par fusion récursif

Les fonctions récursives s'appellent elles-mêmes. L'algorithme est plus difficile à comprendre mais plus efficace / plus rapide.

void fusion (......

fusion(.....

3) Tri par fusion

if(((x < b + s) && (y < b + 2 * s) && (tab[x] < tab[y])) '' (y == b + 2 * s)) {

« if » utilise un booléen qui est vrai si les 3 premières conditions sont vraies, ou la quatrième

&&- « et »

' ' - « ou »

while(s <= 15) {

« while » tant que ; est une boucle dont le nombre de tour n'est pas prédéfinit, le risque = boucle infinie...

Lycée Bernard Palissy
Optimisé par Webnode
Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer