Vous êtes sur la page 1sur 75

Scribd Upload a Document Search Documents Explore

Hassria Bint

Welcome to Scribd - Where the world comes to read, discover, and share...
Were using Facebook to give you reading recommendations based on what your friends are sharing and the things you like. We've also made it easy to connect with your friends: you are now following your Facebook friends who are on Scribd, and they are following you! In the future you can access your account using your Facebook login and password. Learn moreNo thanks Some of your friends are already on Scribd:

/ 10 Download this Document for Free

MiniProjet: Algorithmes de tri page 1/10

Compte Rendu du MiniProj et

Algorith mes de tri en

langage C
Ralis par Mohamed HOUSNI1

re

GEGM I1Encadr par Pr Mohamed BENAHMED

Contenu

Cachier des charges...........

....................... ...............2 Prsentation des algorithmes de tri utiliss ....2


Tri bulle............... ....................... .................2 Tri par slection.........

....................... ...........2 Tri par permutation.... ....................... ..........3


Tri par insertion......... ....................... ...........3 Tri par fusion.............

....................... ............3 Tri rapide............. ....................... ...................4


Code source du programme en C.................... ......5 Exemple d'utilisation....

....................... ...................10 Bibliographie. ....................... ....................... ..............10

(capture d'cran)

MiniProjet: Algorithmes de tri page 2/10

Cachier des charges


1. Demander l'utilisateur de remplir un

tableau Tab avec des entiers. 2. Proposer l'utilisateur de choisir entre les algorithmes de tri suivant:1. Le tri bulle2. Le tri

par slection3. Le tri par permutation4. Le tri par insertion5. Le tri par fusion6. Le tri rapide 3.

Renvoyer le tableau dans lequel les entiers sont classs par ordre croissant.

Prsentation des

algorithmes de tri utiliss


Algorithm e C o d e C Le tri bulle L'algorithme parcourt la liste,et compare

les couplesd'lment s successifs.Lorsq ue deux lmentssuccessi fs ne sont pas dansl'ordre croissant, ils

sontchangs. Aprs chaqueparcours complet de la liste,l'algorithme recommencel'op ration. Lorsqu'aucunch ange n'a lieu

pendant unparcours, cela signifie que laliste est trie : l'algorithmepeut s'arrter. // tri bulle

#define TRUE 1#define FALSE 0 void tri_a_bulle( int *t, int n){

int j =0; int tmp =0; int en_desordre =1; while

(en_desordre){en _desordre = FALSE; for (j =0; j < n-1; j++){ if (t[j] > t[j+1]){tmp =

t[j+1];t[j+1] = t[j];t[j] = tmp;en_desordre = TRUE;}}}}Le tri par slctionLe tri par slection (ou tri parextraction) est

undesalgorithme s de triles plustriviaux. Il consiste en larecherche soit du plus grandlment (ou le plus petit) quel'on va

replacer sa positionfinale c'est--dire endernire position (ou enpremire), puis on recherchele second plus grand lment

// tri par slection void tri_selection( int *t, int n){ int

i, min, j , tmp; for (i =0; i < n -1; i++) {min = i; for (j = i+1; j < n ; j++) if

(t[j] < t[min])min = j; if (min != i){


MiniProjet: Algorithmes de tri page 3/10

(ou le second plus petit)

quel'on va replacer galement sa position finale c'est--direen avant-dernire position (ouen seconde), etc., jusqu' ceque le

tableau soitentirement tri.tmp = t[i];t[i] = t[min];t[min] = tmp;}}} Le tri par permutation Le tri par permutation est

letri du jeu de cartes, ilconsiste parcourir le tableau jusqu' ce que l'on trouve unlment plus petit que leprcedent donc mal plac.On

prend cet lment et on lerange sa place dans letableau puis on continue lalecture.On s'arrte la fin dutableau.

// tri par permutation void tri_permutation( int *t, int n){ int

i,s=0,k; int nb[n]; int res [n]; for (i=0;i<n;i++){ for (k=0;k<n;k++){

if (t[i]>t[k]) s++;nb[i]=s;}res[ s]=t[i];s=0;} for ( i=0;i<n;i++)t[i]= res[i];} Tri par insertion

Le tri par insertion consiste parcourir la liste : on prendles lments dans l'ordre.Ensuite, on les compare avecles lments prcdents jusqu'

trouver la place del'lment qu'on considre. Ilne reste plus qu' dcaler leslments du tableau pourinsrer l'lment

considr sa place dans la partie djtrie. // tri par insertion void tri_insertion( int *t,

int n){ int i,p,j; int x; for

(i =1; i < n; i++){x = t[i];p = i-1; while (t[p] > x && p->0) {}p++; for

(j = i-1; j >= p; j-) {t[j+1] = t[j];}t[p] = x;}} Tri par fusion Le tri fusion est construit // tri par fusion void fusion(

int *t, int deb1, int fin1, int fin2)

MiniProjet: Algorithmes de tri page 4/10

suivant la stratgie "diviserpour rgner", en anglais"divide and conquer". Leprincipe de

base de lastratgie "diviser pourrgner" est que pour rsoudreun gros problme, il estsouvent plus facile de

lediviser en petits problmeslme ntaires. Une fois chaquepetit problme rsolu, il ny aplus qu combiner lesdiffrentes

solutions pourrsoudre le problme global.La mthode "diviser pourrgner" est tout faitapplicable au problme de tri

:plutt que de trier le tableaucomplet, il est prfrable detrier deux sous tableaux detaille gale, puis de fusionnerles rsultats.Lalgori

thme propos ici estrcursif. En effet, les deuxsous tableaux seront euxmme tris laide delalgorithme de tri fusion.

Untableau ne comportant quunseul lment sera considrcomme tri : cest la conditionsine qua non sans laquellelalgorith

me naurais pas deconditions darrt. Etapes delalgorithme :Division de lensemble devaleurs en deux parties- Tri de chacun des

deuxensemblesFusion des deux ensembles{ int *table1; int deb2=fin1+1; int compt1=deb1;

int compt2=deb2; int i;table1=( int *)malloc((fin1deb1+1)* sizeof (

int )); for (i=deb1;i<=fin1;i ++)table1[ideb1]=t[i]; for (i=deb1;i<=fin2;i ++){

if (compt1==deb2) break ; else if (compt2==(fin2+ 1))

{t[i]=table1[com pt1deb1];compt1++; } else


if (table1[compt1deb1]<t[compt2]

){t[i]=table1[co mpt1deb1];compt1++; } else {t[i]=t[compt2];c ompt2++;}}free( table1);} void

tri_fusion_bis( int *t, int deb, int fin){ if (deb!=fin){

int milieu=(fin+deb) /2;tri_fusion_bis( t,deb,milieu);tri_ fusion_bis(t,mili eu+1,fin);fusion( t,deb,milieu,fin); }} void

tri_fusion( int *t, int n){ if (n>0) tri_fusion_bis(t,0 ,n-1); }

Le tri rapide La mthode consiste placerun lment du tableau (appelpivot) sa place dfinitive, enpermutant tous

les lmentsde telle sorte que tous ceuxqui lui sont infrieurs soient sa gauche et que tous ceux quilui sont suprieurs soient sa

// tri rapide void echanger( int *t, int i, int j){

int tmp;tmp=t[i];t[i] =t[j];t[j]=tmp;}


Langage C: Les Diffrents Algorithmes de Tri
Download this Document for FreePrintMobileCollectionsReport Document

Info and Rating


Follow gogolplex1

Share & Embed Related Documents


PreviousNext 1. 8 p.

18 p.

1 p.

2. 2 p.

7 p.

24 p.

3. 15 p.

2 p.

9 p.

4.

24 p.

52 p.

8 p.

5.

8 p.

31 p.

23 p.

6.

2 p.

60 p.

60 p.

7.

60 p.

65 p.

65 p.

8.

65 p.

11 p.

1 p.

9.

15 p.

1 p.

30 p.

10.

11 p.

15 p.

19 p.

11.

1 p.

18 p.

2 p.

More from this user


PreviousNext 1.

1 p.

29 p.

10 p.

2.

47 p.

34 p.

3 p.

3.

2 p.

3 p.

4 p.

4.

2 p.

2 p.

2 p.

Recent Readcasters

Add a Comment

Hamza Amrileft a comment thank you so mutch 6 days ago

Nassim Hmidileft a comment is reading Langage C: Les Diffrents Algorithmes de Tri. 10 / 19 / 2011 gogolplex1left a comment thank you for readcasting ! 10 / 10 / 2010 Upload a Document Search Documents

Follow Us! scribd.com/scribd twitter.com/scribd facebook.com/scribd

About Press Blog Partners Scribd 101 Web Stuff Support FAQ Developers / API Jobs Terms Copyright Privacy

Copyright 2012 Scribd Inc. Language: English

Vous aimerez peut-être aussi