Introduction à la syntaxe du langage Java Sujet 2

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