Vous êtes sur la page 1sur 4

IUT des Pays de lAdour - RT2 Informatique - Module IC2 - Algorithmique Avance

Langage C Sujet 00a : Algorithmes de tri de tableaux

Lobjectif de ce TD est dtudier diverses mthodes permettant de trier, par ordre croissant, les valeurs dun tableau.

Mthode de tri par recherches successives de minimum (ou par slection)


Le principe de cette mthode trs intuitive consiste : chercher le minimum dans un sous-tableau (au dpart le tableau complet contenant les N valeurs non ordonnes) permuter ce minimum avec le premier lment du sous-tableau puis itrer ce traitement sur un nouveau sous-tableau de N-1 lments (on ne tient plus compte du premier lment qui est maintenant sa place) 1. Ecrire la fonction Permut(A,B) qui permute les valeurs relles contenues dans A et B. 2. En sinspirant de la fonction MinTab(N,Tab) crite dans le TD prcdent, crire maintenant la fonction RangMinTab(N,P,Tab) qui retourne cette fois le rang (et non la valeur) de la plus petite des valeurs relles contenues dans le tableau Tab partir du rang P. 3. Ecrire la fonction TriSel(N,Tab) qui permet de trier par ordre croissant, suivant la mthode nonce, les N valeurs relles contenues dans le tableau Tab. 4. Elments de complexit algorithmique : valuer le nombre doprations ralises par cette fonction (en fonction de N).

Mthode de tri par bulles (ou par propagation)

Le principe de cette mthode 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 ordonnes. Lalgorithme sarrte lorsque lon constate quaucune permutation na t eectue lors du dernier "survol" du tableau. 1. Ecrire la fonction TriBul(N,Tab) qui permet de trier, suivant la mthode nonce, les N valeurs relles contenues dans le tableau Tab. La fonction Permut(A,B) crite prcdemment pourra bien videmment tre rutilise. 2. Elments de complexit algorithmique : valuer le nombre doprations ralises par cette fonction, et comparer ce rsultat avec celui de la premire mthode de tri. Conclusion ?

Solution
Pour cet exercice nous rutilisons les fonctions ChargerTab et EditerTab du sujet 00.

1. Tri par slection #include <s t d i o . h> void Permut ( f l o a t A, f l o a t B) { f l o a t temp ; temp = A; A = B ; B = temp ; } int RangMinTab ( int N, int P , f l o a t Tab [ ] ) { int i , r e s u l t a t=P ; fo r ( i=P+1; i <N; i ++) i f ( Tab [ i ]<Tab [ r e s u l t a t ] ) r e s u l t a t=i ; return r e s u l t a t ; } void T r i S e l ( int N, f l o a t Tab [ ] ) { int i ; fo r ( i =0; i <N 1; i ++) { int min = RangMinTab (N, i , Tab ) ; Permut(&Tab [ i ] , &Tab [ min ] ) ; } } void ChargerTab ( int N, f l o a t Tab [ ] ) { int i ; p r i n t f ( "Combien de v a l e u r s ? " ) ; s c a n f ( "%d" ,N ) ; fo r ( i =0; i <N; i ++) { p r i n t f ( " Valeur %d : " , i +1); s c a n f ( "%f " ,&Tab [ i ] ) ; } p r i n t f ( " \n" ) ; }

void EditerTab ( int N, f l o a t Tab [ ] ) { int i ; fo r ( i =0; i <N; i ++) { p r i n t f ( " Valeur %d=%f \n" , i +1,Tab [ i ] ) ; } p r i n t f ( " \n" ) ; } int main ( int argc , char argv ) { f l o a t myTab [ 1 0 0 ] ; int nb ; ChargerTab(&nb , myTab ) ; EditerTab ( nb , myTab ) ; T r i S e l ( nb , myTab ) ; EditerTab ( nb , myTab ) ; }

2. Tri bulles #include <s t d i o . h> void Permut ( f l o a t A, f l o a t B) { f l o a t temp ; temp = A; A = B ; B = temp ; } void TriBul ( int N, f l o a t Tab [ ] ) { int i , nbp ; do { nbp=0; fo r ( i =0; i <N 1; i ++) i f ( Tab [ i +1]<Tab [ i ] ) { Permut(&Tab [ i ] , &Tab [ i + 1 ] ) ; nbp++; } } while ( nbp ! = 0 ) ; }

void ChargerTab ( int N, f l o a t Tab [ ] ) { int i ; p r i n t f ( "Combien de v a l e u r s ? " ) ; s c a n f ( "%d" ,N ) ; fo r ( i =0; i <N; i ++) { p r i n t f ( " Valeur %d : " , i +1); s c a n f ( "%f " ,&Tab [ i ] ) ; } p r i n t f ( " \n" ) ; } void EditerTab ( int N, f l o a t Tab [ ] ) { int i ; fo r ( i =0; i <N; i ++) { p r i n t f ( " Valeur %d=%f \n" , i +1,Tab [ i ] ) ; } p r i n t f ( " \n" ) ; } int main ( int argc , char argv ) { f l o a t myTab [ 1 0 0 ] ; int nb ; ChargerTab(&nb , myTab ) ; EditerTab ( nb , myTab ) ; TriBul ( nb , myTab ) ; EditerTab ( nb , myTab ) ; }

Vous aimerez peut-être aussi