Académique Documents
Professionnel Documents
Culture Documents
Lobjectif de ce TD est dtudier diverses mthodes permettant de trier, par ordre croissant, les valeurs dun tableau.
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 ) ; }