Un algorithme de tri : le tri par sélection
Objectif de la séquence :
Concevoir et programmer sur Javascool un algorithme de tri : le tri par sélection.
Utiliser un algorithme de tri pour un petit jeu de dés.
I) Situations problèmes :
Jeu de tri
Castor aime jouer à un jeu de tri de cartes dont les règles sont les suivantes.
Les cartes doivent être posées côte à côte par ordre croissant de gauche à droite en un
minimum de déplacements.
Un déplacement équivaut à l’échange de deux cartes voisines.
Combien de déplacements faut-il effectuer au minimum pour classer les cartes ci-dessous :
Trier des chiffres
Castor trie une série de chiffres à l’aide d’un procédé très particulier. Les trois premières étapes
modifient la série, de cette façon :
Série : 5 , 4 , 7 , 2 , 0 , 3 , 6 , 1
Etape 1 : 4 , 5 , 2 , 0 , 3 , 6 , 1 , 7
Etape 2 : 4 , 2 , 0 , 3 , 5 , 1 , 6 , 7
Etape 3 : 2 , 0 , 3 , 4 , 1 , 5 , 6 , 7
Quelle est la série à l’étape suivante ?
II) Génération aléatoire d’un tableau
Préliminaire :
la fonction prédéfinie random(a,b) donne aléatoirement un entier dans l’intervalle [a ; b[ .
1) Ecrire une fonction
void aleat(int n)
qui affiche un tableau de taille n rempli aléatoirement par des entiers compris entre 1 et 6.
2) Ecrire une fonction
int min(int [] tab, int i, int j)
qui retourne le plus petit indice du minimum de la portion du tableau comprise entre les
indices i et j (i < j).
III) Mettons de l’ordre !!!!!
Partie A : échangeons les casseroles
1) Apparemment, on peut ranger deux entiers n et p à l’aide de l’algorithme suivant :
Entrée : saisir n et p entiers naturels
Traitement : si n > p alors
affecter à n la valeur p
affecter à p la valeur n
Sortie : afficher n puis p
En sortie, on demande d’afficher successivement les entiers dans l’ordre croissant.
Pourquoi cet algorithme est incorrect ? Quel résultat donne-t-il ?
2) Voici un algorithme correct pour ranger n et p dans l’ordre croissant :
Entrée : saisir n et p entiers naturels
Traitement : si n > p alors
échanger n et p
Sortie : afficher n puis p
a) Imaginez que vous possédiez une petite et une grande casserole : la petite casserole contient
du chocolat fondu et la grande casserole du beurre fondu.
Écrivez en pseudo-langage le traitement qui initialise le contenu des casseroles à leur valeur
initiale et ensuite réalise la permutation de leurs contenus.
b) Écrire une fonction
void echange(int [] t,int i, int j)
qui permute les valeurs contenues à l’indice i et à l’indice j du tableau.