• Aucun résultat trouvé

2 Méthode de tri par bulles (ou par propagation)

N/A
N/A
Protected

Academic year: 2022

Partager "2 Méthode de tri par bulles (ou par propagation)"

Copied!
4
0
0

Texte intégral

(1)

IUT des Pays de l’Adour - RT1

Module I3 - Techniques de Programmation

Langage C

Sujet 11 : 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 Méthode de tri par recherches successives de minimum (ou par sélec- tion)

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. Ecrire la fonctionPermut(A,B) qui permute les valeurs réelles contenues dansA etB.

2. En s’inspirant de la fonctionMinTab(N,Tab)écrite dans le TD précédent, écrire maintenant la fonction RangMinTab(N,P,Tab) qui retourne cette foisle rang (et non la valeur) de la plus petite des valeurs réelles contenues dans le tableau Tabà partir du rang P.

3. Ecrire la fonctionTriSel(N,Tab)qui permet de trier par ordre croissant, suivant la méthode énoncée, les N valeurs réelles contenues dans le tableauTab.

4. Eléments de complexité algorithmique : évaluer le nombre d’opérations réalisées par cette fonction (en fonction de N).

2 Méthode de tri par bulles (ou par propagation)

Le principe de cette méthode consiste à comparer les couples de valeurs successivesTab[i]etTab[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. Ecrire la fonctionTriBul(B,Tab)qui permet de trier, suivant la méthode énoncée, lesNvaleurs réelles contenues dans le tableauTab. La fonctionPermut(A,B)écrite précédemment pourra bien évidemment être réutilisée.

2. Eléments de complexité algorithmique : évaluer le nombre d’opérations réalisées par cette fonction, et comparer ce résultat avec celui de la première méthode de tri. Conclusion ?

1

(2)

Solution

Pour cet exercice nous réutilisons les fonctions ChargerTabetEditerTab du sujet 10.

1. Tri par sélection

#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 ; }

i n t RangMinTab (i n t N, i n t P , f l o a t Tab [ ] ) { i n t i , r e s u l t a t=P ;

f o 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 (i n t N, f l o a t Tab [ ] ) { i n t i ;

f o r ( i =0; i <N−1; i ++) {

i n t min = RangMinTab (N, i , Tab ) ; Permut(&Tab [ i ] , &Tab [ min ] ) ; }

}

void ChargerTab (i n t∗ N, f l o a t Tab [ ] ) { i n t i ;

p r i n t f ( " Combien␣ de ␣ v a l e u r s ␣ ? ␣ " ) ; s c a n f ( "%d" ,N ) ;

f o r( i =0; i <∗N; i ++) {

p r i n t f ( " V a l e u r ␣%d : ␣ " , i + 1 ) ; s c a n f ( "%f " ,&Tab [ i ] ) ;

}

p r i n t f ( " \n" ) ; }

2

(3)

void Editer Tab (i n t N, f l o a t Tab [ ] ) { i n t i ;

f o r ( i =0; i <N; i ++) {

p r i n t f ( " V a l e u r ␣%d␣=␣%f \n" , i +1 ,Tab [ i ] ) ; }

p r i n t f ( " \n" ) ; }

i n t main (i n t a r g c , char∗∗ a r g v ) { f l o a t myTab [ 1 0 0 ] ;

i n t nb ;

ChargerTab(&nb , myTab ) ; Edite rTab ( nb , myTab ) ; T r i S e l ( nb , myTab ) ; Edite rTab ( 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 T r i B u l (i n t N, f l o a t Tab [ ] ) { i n t i , nbp ;

do { nbp =0;

f o r ( i =0; i <N−1; i ++) i f ( Tab [ i +1]<Tab [ i ] ) {

Permut(&Tab [ i ] , &Tab [ i + 1 ] ) ; nbp++;

}

} while ( nbp ! = 0 ) ; }

3

(4)

void ChargerTab (i n t∗ N, f l o a t Tab [ ] ) { i n t i ;

p r i n t f ( " Combien␣ de ␣ v a l e u r s ␣ ? ␣ " ) ; s c a n f ( "%d" ,N ) ;

f o r( i =0; i <∗N; i ++) {

p r i n t f ( " V a l e u r ␣%d : ␣ " , i + 1 ) ; s c a n f ( "%f " ,&Tab [ i ] ) ;

}

p r i n t f ( " \n" ) ; }

void Editer Tab (i n t N, f l o a t Tab [ ] ) { i n t i ;

f o r ( i =0; i <N; i ++) {

p r i n t f ( " V a l e u r ␣%d␣=␣%f \n" , i +1 ,Tab [ i ] ) ; }

p r i n t f ( " \n" ) ; }

i n t main (i n t a r g c , char∗∗ a r g v ) { f l o a t myTab [ 1 0 0 ] ;

i n t nb ;

ChargerTab(&nb , myTab ) ; Edite rTab ( nb , myTab ) ; T r i B u l ( nb , myTab ) ; Edite rTab ( nb , myTab ) ; }

4

Références

Documents relatifs

Avec notre nouveau système de panier et le gabarit inclus dans la livraison, on peut positionner exactement tous types de bouteilles dans le panier à bouteilles et ainsi les

تمايلعتلا هذه تيعور اذإ لاإ بيكترلا اذه ةملاس نماض نكيم لا .هذه ةملاسلا تمايلعت ظفح ىجري .لماعتسلااو بيكترلا ءانثأ :تاظحلام ةقاطلا ردصم نأ نم دكأت ،هيف فصرتلا دنعو

Ecrire la fonction RechElt(N,Tab,Val) qui retourne le rang de la première occurence de la valeur réelle Val dans le tableau Tab (contenant N valeurs significatives), ou -1 si Val

En s’inspirant de la fonction double MinTab(double[] Tab, int N) écrite dans le TD précédent, écrire main- tenant la fonction int RangMinTab(double[] Tab, int N, int P) qui

In Datasheet view, you can edit fields, add and delete data, and search for data.. In Access 2007, you

mais tout n’est pas encore trié...... On est sûr de ne plus devoir

mais tout n’est pas encore trié...... On est sûr de ne plus devoir

TABLEAU DE CORRESPONDANCE CARACTERES LATINS - GRECS DANS LA POLICE GREEK.TTF. Les nombres représentent les