IUT des Pays de l’Adour - RT1 M2207 - Consolidation des bases de la programmation Introduction à la syntaxe du langage Java Sujet 2 - Algorithmes de tri de tableaux L’objectif de ce TD est d’étudier diverses méthodes permettant de trier, par ordre croissant, les valeurs d’un tableau. 1 Tri par sélection (ou par recherches successives de minimum) Le principe de cette méthode très intuitive consiste à : — chercher le minimum dans un sous-tableau (au départ le tableau complet contenant les N valeurs non ordonnées) — permuter ce minimum avec le premier élément du sous-tableau — puis itérer ce traitement sur un nouveau sous-tableau de N-1 éléments (on ne tient plus compte du premier élément qui est maintenant à sa place) 1. Écrire la fonction void Permut(double[] Tab, int A, int B) qui permute les valeurs réelles contenues dans le tableau Tab aux indices A et B. 2. En s’inspirant de la fonction double MinTab(double[] Tab, int N) écrite dans le TD précédent, écrire maintenant la fonction int RangMinTab(double[] Tab, int N, int P) qui retourne cette fois le rang (et non la valeur) de la plus petite des valeurs réelles contenues dans le tableau Tab à partir du rang P. 3. Écrire la fonction void TriSel(double[] Tab, int N) qui permet de trier par ordre croissant, suivant la méthode énoncée, les N valeurs réelles contenues dans le tableau Tab. 4. Écrire un programme de test. Vous pouvez pour cela réutiliser les fonctions ChargerTab et EditerTab écrites lors du TD précédent. 2 Tri à bulles (ou par propagation) Le principe de cette méthode consiste à comparer les couples de valeurs successives Tab[i] et Tab[i+1] pour i variant de 0 à N-2, et à les permuter si elles sont mal ordonnées. L’algorithme s’arrête lorsque l’on constate qu’aucune permutation n’a été effectuée lors du dernier "survol" du tableau. 1. Écrire la fonction void TriBul(double[] Tab, int N) qui permet de trier, suivant la méthode énoncée, les N valeurs réelles contenues dans le tableau Tab. La fonction void Permut(double[] Tab, int A, int B) écrite précédemment pourra bien évidemment être réutilisée. 2. Écrire un programme de test. 1 Solution 1 : Tri par sélection package m2207 . tp02 ; // M2207 − C o n s o l i d a t i o n d e s b a s e s de l a programmation // TP02 − I n t r o s y n t a x e Java : t r i par s é l e c t i o n // Manuel Munier − IUT d e s Pays de l ’ Adour − 02/2014 import j a v a . u t i l . Scanner ; public c l a s s MonProgTP02_TriSel { private s t a t i c int ChargerTab ( double [ ] Tab ) { Scanner s c = new Scanner ( System . i n ) ; int N; System . out . p r i n t ( "Combien de v a l e u r s ? " ) ; N = sc . nextInt ( ) ; f o r ( int i =0; i <N; i ++) { System . out . p r i n t ( " S a i s i r v a l e u r #"+i+" " ) ; Tab [ i ] = s c . nextDouble ( ) ; } return N; } private s t a t i c void EditerTab ( double [ ] Tab , int N) { f o r ( int i =0; i <N; i ++) { System . out . p r i n t l n ( " Valeur #"+i+" = "+Tab [ i ] ) ; } } private s t a t i c void Permut ( double [ ] Tab , int A, int B) { double temp = Tab [A ] ; Tab [A] = Tab [ B ] ; Tab [ B ] = temp ; } private s t a t i c int RangMinTab ( double [ ] Tab , int N, int P) { int rmin = P ; f o r ( int i=P+1; i <N; i ++) { i f ( Tab [ i ]<Tab [ rmin ] ) { rmin = i ; } } return rmin ; } private s t a t i c void T r i S e l ( double [ ] Tab , int N) { f o r ( int i =0; i <N; i ++) { int min = RangMinTab ( Tab , N, i ) ; Permut ( Tab , i , min ) ; } } 2 public s t a t i c void main ( S t r i n g [ ] a r g s ) { double [ ] t a b l o ; t a b l o = new double [ 1 0 0 ] ; int nb = ChargerTab ( t a b l o ) ; T r i S e l ( t a b l o , nb ) ; EditerTab ( t a b l o , nb ) ; } } 3 Solution 2 : Tri à bulles package m2207 . tp02 ; // M2207 − C o n s o l i d a t i o n d e s b a s e s de l a programmation // TP02 − I n t r o s y n t a x e Java : t r i à b u l l e s // Manuel Munier − IUT d e s Pays de l ’ Adour − 02/2014 import j a v a . u t i l . Scanner ; public c l a s s MonProgTP02_TriBul { private s t a t i c int ChargerTab ( double [ ] Tab ) { Scanner s c = new Scanner ( System . i n ) ; int N; System . out . p r i n t ( "Combien de v a l e u r s ? " ) ; N = sc . nextInt ( ) ; f o r ( int i =0; i <N; i ++) { System . out . p r i n t ( " S a i s i r v a l e u r #"+i+" " ) ; Tab [ i ] = s c . nextDouble ( ) ; } return N; } private s t a t i c void EditerTab ( double [ ] Tab , int N) { f o r ( int i =0; i <N; i ++) { System . out . p r i n t l n ( " Valeur #"+i+" = "+Tab [ i ] ) ; } } private s t a t i c void Permut ( double [ ] Tab , int A, int B) { double temp = Tab [A ] ; Tab [A] = Tab [ B ] ; Tab [ B ] = temp ; } private s t a t i c void TriBul ( double [ ] Tab , int N) { int nbp ; do { nbp = 0 ; f o r ( int i =0; i <N−1; i ++) i f ( Tab [ i +1]<Tab [ i ] ) { Permut ( Tab , i , i +1); nbp++; } } while ( nbp ! = 0 ) ; } 4 public s t a t i c void main ( S t r i n g [ ] a r g s ) { double [ ] t a b l o ; t a b l o = new double [ 1 0 0 ] ; int nb = ChargerTab ( t a b l o ) ; TriBul ( t a b l o , nb ) ; EditerTab ( t a b l o , nb ) ; } } 5
© Copyright 2024 Paperzz