Académique Documents
Professionnel Documents
Culture Documents
Cours ASD Chapitre3
Cours ASD Chapitre3
Chapitre
Vecteurs, sous-vecteurs
& algorithmes de tri
2EMHFWLI
x ,QWURGXLUHODQRWLRQG¶HQVHPEOHGHYDULDEOHVGHPrPHW\SHVLPSOH
x 6DYRLUPDQLSXOHUOHVYHFWHXUV UHFKHUFKHLQVHUWLRQVXSSUHVVLRQG¶XQpOpPHQWGDQVOHV
YHFWHXUVWULpVHWQRQWULpV
x 6DYRLUWULHUXQYHFWHXU
'pILQLWLRQIRUPHOOHG¶XQYHFWHXU
8QYHFWHXUHVWXQHQVHPEOHGHYDULDEOHVGHPrPHQDWXUHDX[TXHOOHVRQYHXWSRXYRLUDFFpGHU
VRLWGLUHFWHPHQWSDUVRQQXPpURG¶RUGUHVRLWHQOHVSDUFRXUDQWWRXWHVGDQVO¶RUGUH
6RLHQWܧXQHQVHPEOHGHYDOHXUVTXHOFRQTXHVXQHQWLHU ݊TXLGpVLJQHOHQRPEUHG¶pOpPHQWV
GXYHFWHXUHWܫXQLQWHUYDOOHGHܰWHOTXH ܫൌ ሾͳǤ Ǥ ݊ሿDYHF݊ Ͳ
8QYHFWHXUHVWXQHDSSOLFDWLRQܸGHܫGDQVܫܧHVWDSSHOpHQVHPEOHGHVLQGLFHV2QXWLOLVHUD
OHVQRWDWLRQVVXLYDQWHVGDQVO¶pFULWXUHGHVVSpFLILFDWLRQVIRUPHOOHVGHVDOJRULWKPHVXWLOLVDQWGHV
YHFWHXUV
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
3RXU GHX[ HQWLHUV ݂݅݊ HW ݑݏWHO TXH ͲƬ ݑݏ ݂݅݊ RQ GpVLJQHUD SDU ܸሾ݂݅݊Ǥ Ǥ ݑݏሿ OH
VRXVYHFWHXUQRQYLGHFRPSRVDLWGHVpOpPHQWVܸሾ݂݅݊ሿǡ ܸሾ݂݅݊ ͳሿǡ Ǥ Ǥ ǡ ܸሾݑݏሿ/HVGHX[LQGLFHV
݂݅݊HWݑݏVRQWDSSHOpVUHVSHFWLYHPHQWODERUQHLQIpULHXUHHWODERUQHVXSpULHXUHGXVRXV
YHFWHXUܸ
/HVpOpPHQWVG¶XQYHFWHXUSRXUURQWrWUH
x 'HVpOpPHQWVGXW\SHVLPSOHV HQWLHUVUpHOVFDUDFWqUHVFKDvQHVGHFDUDFWqUHVHWF
x 'HVVWUXFWXUHVGHGRQQpHVGpILQLHVSDUQRXVPrPHV SDUH[HPSOHVWUXFWXUHMRXHXUVGp
ILQLGDQVOHFKDSLWUH
x /HVpOpPHQWVGHܧSRXUURQWDXVVLrWUHHX[PrPHVGHVYHFWHXUV YHFWHXUVGHSOXVLHXUV
GLPHQVLRQVFRPPHGHVPDWULFHVGHX[GLPHQVLRQVYHFWHXUj͵ǡ Ͷǡ ǥ ǡ ݊GLPHQVLRQV
'pFODUDWLRQHWPDQLSXODWLRQGHVYHFWHXUV
'DQVFHFRXUVRQGpFODUHXQYHFWHXUVHORQODV\QWD[HVXLYDQWH
6\QWD[H
൏ ݏ݁݀݁ݕݐ±݈±݉݁݊ ݎݑ݁ݐܿ݁ݒݑ݀ݏݐ൏ ݅݀݁݊ ݎݑ݁ݐܿ݁ݒݑ݀ݐ݂݊݁݅݅ݐ ሾ݊݉ܽݔሿǢ
'DQV FHWWH GpFODUDWLRQ ݊݉ܽ ݔHVW XQH YDOHXU TXL UHSUpVHQWH OD WDLOOH PD[LPDOH GX YHFWHXU HW
OHXUVLQGLFHVVHURQWGpILQLVGDQVO¶LQWHUYDOOH ܫൌ ሾͲǤ Ǥ ሺ݊݉ܽ ݔെ ͳሻሿǤ
([HPSOH
6RLWODGpFODUDWLRQVXLYDQWH
intvect[100];
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
([HPSOH
typedefinttype;
voidlireVecteur(typevect[],intinf,intsup){
inti;
if(inf>sup)printf("levecteurvectestvide");
else{
for(i=inf;i<=sup;i++){
printf("entrervect[%d]=",i);
scanf("%d",&vect[i]);}
}
}
/HVGHX[SDUDPqWUHV݂݅݊HWݑݏVRQWUHVSHFWLYHPHQWODERUQHLQIpULHXUHHWODERUQHVXSpULHXUH
GHVRXVYHFWHXUݐܿ݁ݒ3DUH[HPSOHVLRQYHXWOLUHWRXVOHVpOpPHQWVG¶XQYHFWHXUܸFRQWHQDQW
݊݉ܽ ݔൌ ͳͲͲpOpPHQWVRQIDLWDSSHOjODIRQFWLRQ݈݅ݎݑ݁ݐܸܿ݁݁ݎሺሻFRPPHVXLW
voidmain(){
intV[100];
intinf=0;
intsup=99;
lireVecteur(V,inf,sup) ;
}
$OJRULWKPHWUDLWDQWXQYHFWHXUQRQWULp
6RLW ܸ XQ YHFWHXU j ݊ pOpPHQWV O¶HQVHPEOH GHV LQGLFHV ܫHVW ሾͳǤ Ǥ ݊ሿ /H WUDLWHPHQW OH SOXV
VLPSOH FRQVLVWH GH SDUFRXULU OH YHFWHXU RX XQ VRXVYHFWHXU GH ܸ GDQV O¶RUGUH FURLVVDQW
G¶LQGLFHVGHVHVpOpPHQWV2QREWLHQWGRQFXQVFKpPDG¶pQXPpUDWLRQVpTXHQWLHOGHVpOpPHQWV
GXYHFWHXUܸ
([HPSOH
voidafficheVecteurIte(typevect[],intinf,intsup){
inti;
for(i=inf;i<=sup;i++)
printf("vect[%d]=%d\n",i,vect[i]);}
}
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
([HUFLFH
6ROXWLRQ
voidafficheVecteurRec(typevect[],intinf,intsup){
if(inf<=sup){
printf("vect[%d]=%d\n",inf,vect[inf]);
afficheVecteurRec(vect,inf+1,sup);
}
}
5HFKHUFKHG¶XQpOpPHQWGDQVXQYHFWHXUQRQWULp
6RLW݈ܽݒXQHYDULDEOHGHPrPHW\SHTXHFHOOHVFRQWHQXHVGDQVXQYHFWHXUܸQRQWULpRQYHXW
pFULUHXQHIRQFWLRQLWpUDWLYH݅݊݁ݐܫ݁ݐݏ݅ݔ݁ݐሺݐܿ݁ݒ݁ݕݐሾሿǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏݐǡ ݈ܽݒ݁ݕݐሻǢTXLUHQYRLHVL
OH VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ FRQWLHQW XQ pOpPHQW ݒሾ݅ ሿ ൌ א ݅ܿ݁ݒ݈ܽܽݒሾ݂݅݊Ǥ Ǥ ݑݏሿ VLQRQ HOOH
UHQYRLH
([HPSOH
/*1ereversionexisteIte()*/
intexisteIteV1(typevect[],intinf,intsup,typeval){
inti=inf;
inttrouver=0;
while((trouver==0)&&(i<=sup)){
if(vect[i]==val)
trouver=1;
elsei=i+1;
}
returntrouver;
}
8QH GHX[LqPH VROXWLRQ FRQVLVWHUD j SDUFRXULU OH VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ HQ FRPSDUDQW
ݐܿ݁ݒሾ݅ሿǡ ݅ אሾ݂݅݊Ǥ Ǥ ݑݏሿDYHFODYDOHXUUHFKHUFKpH݈ܽݒ3RXUFHODRQXWLOLVHXQHYDULDEOH݅LQLWLDOL
VpHSDUODERUQH݂݅݊TXLVHUDLQFUpPHQWpHWDQWTXHݐܿ݁ݒሾ݅ሿ ് ݈ܽݒHW݅UHVWHUDWRXMRXUVLQIpULHXU
RXpJDOHj&ݑݏHWWHERXFOHYDGRQFV¶DUUrWHUVRLW
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
x &DV ݅ ݑݏORUVTXH ݐܿ݁ݒሾ݅ሿ ൌ ݈ܽݒHW GDQV FH FDV OD IRQFWLRQ ݁ʹܸ݁ݐܫ݁ݐݏ݅ݔሺ ሻGRLW
UHQYR\HUODYDOHXU
/DYDOHXUUHWRXUQpHSDUODIRQFWLRQGpSHQGGRQFGHO¶H[SUHVVLRQ݅ ݑݏǤ&HWWHGpGXFWLRQQRXV
PqQHjODGHX[LqPHYHUVLRQGHODIRQFWLRQ݁ʹܸ݁ݐܫ݁ݐݏ݅ݔሺ ሻFRPPHVXLW
([HPSOH
/*2èmeversionexisteIte()*/
intexisteIteV2(typevect[],intinf,intsup,typeval){
inti=inf;
while((i<=sup)&&(vect[i]!=val))
i=i+1;
if(i<=sup)
return1;
elsereturn0;
}
'DQV OD WURLVLqPH YHUVLRQ RQ SHXW XWLOLVHU GLUHFWHPHQW OD ERUQH ݂݅݊ HQ FRPSDUDQW OH SUHPLHU
pOpPHQW GDQV OH VRXVYHFWHXU QRQ YLGH ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ 6L ݐܿ݁ݒሾ݂݅݊ሿ ് ݈ܽݒRQ FRQWLQXHUD OD
UHFKHUFKHGDQVOHVRXVYHFWHXUQRQYLGHݐܿ݁ݒሾ݂݅݊ ͳǤ Ǥ ݑݏሿ5DSSHORQVLFLTXHVL݂݅݊ ݑݏOH
VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ HVW FRQVLGpUHU FRPPH XQ VRXVYHFWHXU QRQ YLGH &HWWH ERXFOH
V¶DUUHWHVXUOHVGHX[FDVVXLYDQWV
x &DV ݂݅݊ ݑݏORUVTXH DXFXQ VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ QH FRQWLHQW SDV j VRQ
SUHPLHUpOpPHQWXQHYDOHXUpJDOHj݈ܽݒHWGDQVFHFDVODIRQFWLRQUHQYRLH
5HPDUTXH/¶pYDOXDWLRQGHO¶LQVWUXFWLRQ
if(inf<=sup)
return1;
elsereturn0;
SHXWrWUHVLPSOLILpHSDUreturninf<=sup;
'DQVO¶H[HPSOHVXLYDQWRQSURSRVHODWURLVLqPHYHUVLRQGHODIRQFWLRQ݁݁ݐܫ݁ݐݏݔሺሻ
([HPSOH
/*3èmeversionexisteIte()*/
intexisteIteV3(typevect[],intinf,intsup,typeval){
while((inf<=sup)&&(vect[inf]!=val))
inf=inf+1;
returninf<=sup;
}
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
([HUFLFH
6ROXWLRQ
intexisteRec(typevect[],intinf,intsup,typeval){
if(inf>=sup)//casd’unvecteurvide
return0;
if(vect[inf]==val)//casoùlepremierélémentcontientlavaleurval
return1;
returnexisteRec(vect,inf+1,sup,val);//appelrécursif
}
/HVRSpUDWLRQVG¶LQVHUWLRQHWGHVXSSUHVVLRQG¶XQpOpPHQW
6RLW XQ YHFWHXU ܸሾ݊݉ܽݔሿ GH WDLOOH ݊݉ܽ ݔpOpPHQWV HW XQ VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ DYHF
ݑݏ൏ ݊݉ܽݔ
/¶RSpUDWLRQ G¶LQVHUWLRQ ݅݊݁ݎ݁ݏሺݐܿ݁ݒ݁ݕݐሾ ሿǡ ݅݊ݔܽ݉݊ݐǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏ כ ݐǡ ݁݁ݕݐǡ ݅݊ݏݐሻ FRQ
VLVWHjLQVpUHUGDQVODSRVLWLRQݏXQQRXYHOpOpPHQW݁GDQVOHVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ
݁ ݁௦ ݁௦௨
inf pos sup nmax-1
3UpFRQGLWLRQ
7UDLWHPHQW
3RXU UpDOLVHU FHWWH RSpUDWLRQ WRXV OHV pOpPHQWV GH VRXV YHFWHXU ݐܿ݁ݒሾݏǤ Ǥ ݑݏሿ GRLYHQW rWUH
GpFDOpVSDUXQHVHXOHSRVLWLRQjGURLWH3XLVO¶pOpPHQWݐܿ݁ݒሾݏሿSUHQGVODQRXYHOOHYDOHXU݁
&HWWHRSpUDWLRQVLHOOHDXUDOLHXPRGLILHODYDOHXUGHODERUQHVXSpULHXUH&HODH[SOLTXHOHSDV
VDJHSDUDGUHVVHGHFHSDUDPqWUH
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
([HPSOH
voidinserer(typevect[],intnmax,intinf,int*sup,typee,intpos){
inti;
if(*sup<(nmaxŞ1)){
if(pos>=inf&&pos<=(*sup+1)){
for(i=*sup+1;i>pos;iŞŞ)
vect[i]=vect[iŞ1];
vect[i]=e;
*sup=*sup+1;
}
}
}
([HUFLFH
(FULUH XQH SURFpGXUH ݎ݁݉݅ݎݑݏሺݐܿ݁ݒ݁ݕݐሾ ሿǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏ כ ݐǡ ݅݊ݏݐሻ TXL VXSSULPH
O¶pOpPHQWݐܿ݁ݒሾݏሿGHVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿǤ
6ROXWLRQ
3UpFRQGLWLRQ
/D VXSSUHVVLRQ HVW SRVVLEOH VL HW VHXOHPHQW VL OH VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ Q¶HVW SDV YLGH
& HVWjGLUH݂݅݊ ݑݏHWODSRLVRQݏHVWXQHSRVLWLRQYDOLGHWHOTXH א ݏሾ݂݅݊Ǥ Ǥ ݑݏሿ
7UDLWHPHQW
7RXVOHVpOpPHQWVGHVRXVYHFWHXUݐܿ݁ݒሾݏǤ Ǥ ݑݏሿGRLYHQWrWUHGpFDOpVSDUXQHVHXOHSRVLWLRQj
JDXFKH&HWWHRSpUDWLRQPRGLILHODERUQHVXSpULHXUH ݑݏൌ ݑݏെ ͳGDQVOHFDVRODVXSSUHV
VLRQDXUDOLHX
voidsupprimer(typevect[],intinf,int*sup,intpos){
inti;
if(inf<=*sup){
if(pos>=inf&&pos<=(*sup)){
for(i=pos;i<*sup;i++)
vect[i]=vect[i+1];
*sup=*supŞ1;
}
}
}
$OJRULWKPHWUDLWDQWXQVHXOYHFWHXUWULp
3RXUWRXWYHFWHXUݒሾͲǤ Ǥ ݊ሿVLOHVpOpPHQWVFRQVpFXWLIVGHFHYHFWHXUYpULILHQWODUHODWLRQG¶RUGUH
ݒሾ݅ െ ͳሿ ݒሾ݅ሿ UHVSHFWLYHPHQWݒሾ݅ െ ͳሿ ݒሾ݅ሿ RQGLWTXHOHYHFWHXUHVWWULpSDURUGUHFURLVVDQW
UHVSHFWLYHPHQWWULpSDURUGUHGpFURLVVDQW
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
'pILQLWLRQIRUPHOOHG¶XQYHFWHXUWULp
6RLWXQYHFWHXUܸሾ݊݉ܽݔሿXQYHFWHXUGH݊݉ܽݔpOpPHQWV3RXUWRXWVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ
RQDOHVGpILQLWLRQVVXLYDQWHV
x 6L݂݅݊ ൌ ݑݏOHYHFWHXUݐܿ݁ݒFRQWHQDQWXQVHXOpOpPHQWHVWXQYHFWHXUWULp
x 6L ݂݅݊ ൏ ݑݏOH VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿHVW WULp SDU RUGUH FURLVVDQW VL
א ݅ሾ݂݅݊ ͳǤ Ǥ ݑݏሿǡ ݐܿ݁ݒሾ݅ െ ͳሿ ݐܿ݁ݒሾ݅ሿ
x 6L ݂݅݊ ൏ ݑݏOHV VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿHVW WULp SDU RUGUH GpFURLVVDQW VL
א ݅ሾ݂݅݊ ͳǤ Ǥ ݑݏሿǡ ݐܿ݁ݒሾ݅ െ ͳሿ ݐܿ݁ݒሾ݅ሿ
5HFKHUFKHG¶XQpOpPHQWGDQVXQYHFWHXUWULp
3XLVTXH TXH OH VRXVYHFWHXU WULp ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ DYHF ݂݅݊ ൏ ݑݏYpULILH OD UHODWLRQ G¶RUGUH
א ݅ሾ݂݅݊ ͳǤ Ǥ ݑݏሿǡ ݐܿ݁ݒሾ݅ െ ͳሿ ݐܿ݁ݒሾ݅ሿ LO VHUD SOXV MXGLFLHX[ GH SRXUVXLYUH OD UHFKHUFKH
G¶XQHYDOHXU݈ܽݒjSDUWLUGXSUHPLHUpOpPHQWHWWDQWTXHOHVGHX[FRQGLWLRQVVXLYDQWHVUHVWHQW
YpULILpHVHQPrPHWHPSV
&HODSHUPHWG¶DUUrWHUODUHFKHUFKHXQHIRLTX¶RQWRPEHVXUXQpOpPHQWGXYHFWHXUݐܿ݁ݒሾ݅ሿTXL
VRLWpJDOj݈ܽݒRXTX¶LOVRLWVWULFWHPHQWVXSpULHXUjODYDOHXUUHFKHUFKpH'݈ܽݒDQVFHGHUQLHU
FDVLOVHUDLQXWLOHGHSRXUVXLYUHODUHFKHUFKHFDUWRXVOHVpOpPHQWVTXLVHWURXYHURQWDSUqVFHW
pOpPHQW VHURQW DXVVL VWULFWHPHQW VXSpULHXUV GH OD YDOHXU UHFKHUFKpH ' ݈ܽݒDQV O¶H[HPSOH VXL
YDQW OD IRQFWLRQ ݅݊݁ݐܫ݁݅ݎܶ݁ݐݏ݅ݔ݁ݐሺݐܿ݁ݒ݁ݕݐሾሿǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏݐǡ ݈ܽݒ݁ݕݐሻǢ UHQYRLH VL OH VRXV
YHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿFRQWLHQWXQpOpPHQW ݒሾ݅ ሿ ൌ א ݅ܿ݁ݒ݈ܽܽݒሾ݂݅݊Ǥ Ǥ ݑݏሿVLQRQHOOHUHQYRLH
([HPSOH
3UpFRQGLWLRQ
/H VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ HVW XQ YHFWHXU WULp SDU XQ RUGUH FURLVVDQW & HVWjGLUH
א ݅ሾ݂݅݊ ͳǤ Ǥ ݑݏሿǡ ݐܿ݁ݒሾ݅ െ ͳሿ ݐܿ݁ݒሾ݅ሿ
intexisteTrieIte(typevect[],intinf,intsup,typeval){
if(inf>sup)return0;
while((inf<=sup)&&(vect[inf]<val))
inf=inf+1;
return(vect[inf]==val);
}
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
/DUHFKHUFKHGLFKRWRPLTXHHVWVLPLODLUHjODIDoRQGRQWYRXVUHFKHUFKH]XQPRWGDQVXQGLF
WLRQQDLUH GH PRWV 3XLVTXH OHV PRWV G¶XQ GLFWLRQQDLUH VRQW UDQJpV SDU RUGUH DOSKDEpWLTXH RQ
RXYUH OH GLFWLRQQDLUH DX KDVDUG HW VHORQ OD SDJH VXU ODTXHOOH RQ WRPEH RQ GpFLGH VL OH PRW
FKHUFKpHVWDYDQWRXDSUqVFHWWHSDJHRQOLPLWHDORUVOHVUHFKHUFKHVDX[SDJHVDQWpULHXUHVRX
SRVWpULHXUHVHQUHSUHQDQWODPrPHPpWKRGH
3XLVTXH FHWWH PpWKRGH HVW SOXV HIILFDFH GH OD UHFKHUFKH VpTXHQWLHOOH QRXV DOORQV GpILQLU OD
IRQFWLRQ ݄݅݊ܿ݅ܦ݄݁ܿݎ݄݁ܿ݁ݎݐሺݐܿ݁ݒ݁ݕݐሾሿǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏݐǡ ݈ܽݒ݁ݕݐሻ TXL IDLW OD UHFKHUFKH G¶XQH
YDOHXUYDOGHODPrPHPDQLqUHGHODUHFKHUFKHG¶XQPRWGDQVXQGLFWLRQQDLUH
([HPSOH
3UpFRQGLWLRQ
/HVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿHVWXQYHFWHXUWULpSDURUGUHFURLVVDQW
7UDLWHPHQW
&RPSDUHUODYDOHXUUHFKHUFKpH݈ܽݒDYHFODYDOHXUGHO¶pOpPHQWTXLVHWURXYHDXPLOLHXGHVRXV
YHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿQRQYLGHF HVWjGLUHݐܿ݁ݒሾ݈݉݅݅݁ݑሿDYHF݈݉݅݅݁ ݑൌ ሺ݂݅݊ ݑݏሻȀʹ
x 6 LO\DpJDOLWpDUUrWHUOHWUDLWHPHQWHQUHQYR\DQWODYDOHXU YDOHXU݈ܽݒH[LVWH
x 6L OD YDOHXU UHFKHUFKpH ݈ܽݒSUpFqGH OD YDOHXU GH O¶pOpPHQW GH PLOLHX ݐܿ݁ݒሾ݈݉݅݅݁ݑሿ
݈ܽݒ൏ ݐܿ݁ݒሾ݈݉݅݅݁ݑሿ FRQWLQXHU OD UHFKHUFKH GDQV OH VRXVYHFWHXU JDXFKH GH OD SRVL
WLRQGHPLOLHX ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ሺ݈݉݅݅݁ ݑെ ͳሻሿ
x 6L OD YDOHXU UHFKHUFKpH ݈ܽݒVXLW OD YDOHXU GH O¶pOpPHQW GH PLOLHX ݐܿ݁ݒሾ݈݉݅݅݁ݑሿ
݈ܽݒ ݐܿ݁ݒሾ݈݉݅݅݁ݑሿ FRQWLQXHU OD UHFKHUFKH GDQV OH VRXVYHFWHXU GURLW GH OD SRVLWLRQ
GHPLOLHX ݐܿ݁ݒሾሺ݈݉݅݅݁ ݑ ͳሻǤ Ǥ ݑݏሿ
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
,QVHUWLRQHWVXSSUHVVLRQG¶XQpOpPHQWGDQVXQYHFWHXUWULp
,OV¶DJLWG¶DMRXWHUDXYHFWHXUWULpݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿǡO¶pOpPHQW݁SRXUREWHQLUXQQRXYHDXYHFWHXUWULp
ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏ ͳሿFRQWHQDQWWRXVOHVpOpPHQWVGHݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿSOXVO¶pOpPHQW݁
3UpFRQGLWLRQ
/HVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿHVWXQYHFWHXUWULpSDURUGUHFURLVVDQW
7UDLWHPHQW
&KHUFKHUODSODFHGHO¶pOpPHQW݁jLQVpUHUSXLVHIIHFWXHUO¶LQVHUWLRQ
2Q GpILQL DORUV OD IRQFWLRQ ݅݊݅ݎܶ݊݅ݐ݅ݏ݄ܲ݁ܿݎ݄݁ܿݐሺሻ TXL UHQYRLH OD SRVLWLRQ G¶LQVHUWLRQ GH
O¶pOpPHQWݐܿ݁ݒሾ݅ሿ ݁GDQVOHVRXVYHFWHXUWULqݐܿ݁ݒሾሿ
intcherchePositionTri(typevect[],intinf,intsup,typee){
if(inf>sup)returninf;
if(e<vect[inf])returninf;
if(e>vect[sup])returnsup+1;
returncherchePositionTri(vect,inf+1,sup,e);
}
/DIRQFWLRQG¶LQVHUWLRQGDQVXQYHFWHXUWULpHVWODVXLYDQWH
voidinsereVectTrie(typevect[],intnmax,intinf,int*sup,typee){
intpos=cherchePositionTri(vect,inf,*sup,e);
insere(vect,nmax,inf,sup,e,pos);
}
/HVDOJRULWKPHVGHWULVG¶XQYHFWHXU
6RLWXQVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿOHVDOJRULWKPHVGHWULVFRQVLGpUpVGDQVFHFRXUVFRQVLV
WHQWjSDUFRXULUOHVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿHQSHUPXWDQWVHVpOpPHQWVDILQTXHODUHODWLRQ
G¶RUGUH א ݅ሾ݂݅݊ ͳǤ Ǥ ݑݏሿǡ ݒሾ݅ െ ͳሿ ݒሾ݅ሿVRLWYpULILpH
7ULSDUVpOHFWLRQ
/D PpWKRGH FRQVLVWH j SDUFRXULU OH VRXVYHFWHXU GH ©JDXFKH j GURLWHª j O DLGH GH O LQGLFH
݅ אሾ݂݅݊Ǥ Ǥ ݑݏെ ͳሿjSDUWLUGXSUHPLHUpOpPHQWݐܿ݁ݒሾ݅ ሿǡ ݅ ൌ ݂݅݊DOODQWMXVTX jO¶DYDQWGHUQLHUpOp
PHQWݐܿ݁ݒሾ݅ ሿǡ ݅ ൌ ݑݏെ ͳGDQVOHVVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ3RXUFKDTXHpOpPHQWݐܿ݁ݒሾ݅ሿ
RQGpWHUPLQHODSRVLWLRQ א ݊݅ܯሾ݅ ͳǤ Ǥ ݑݏሿGXSUHPLHUPLQLPXPjGURLWHGXݐܿ݁ݒሾ݅ ͳǤ Ǥ ݑݏሿ
F HVWjGLUH א ݆ሾ݅ ͳǤ Ǥ ݑݏሿ݁ א ݊݅ܯݐሾ݅Ǥ Ǥ ݑݏሿǡ ݐܿ݁ݒሾ݊݅ܯሿ ݐܿ݁ݒሾ݆ሿ 3RXU FKDTXH LWpUDWLRQ
G¶LQFUpPHQWDWLRQGH݅HWVL݅ ് ݊݅ܯRQpFKDQJHODYDOHXUGHO¶pOpPHQW ݐܿ݁ݒሾ݅ሿDYHFODYDOHXU
ݐܿ݁ݒሾ݊݅ܯሿ
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
3RXU pFULUH FHWWH SURFpGXUH QRXV DXURQV EHVRLQ G¶XQH SURFpGXUH ࢜ࢊ݊݅ݐܽݐݑ݉ݎ݁ሺ כ
ܽǡ ܾ כሻSRXUpFKDQJHUOHVYDOHXUVGHGHX[pOpPHQWVGXYHFWHXU&HWWHSURFpGXUHSUHQGHQ
DUJXPHQWVOHVDGUHVVHVGHFHVGHX[pOpPHQWV
/DSURFpGXUHGHSHUPXWDWLRQ
voidpermutation(type*a,type*b){
typetemp=*a;
*a=*b;
*b=temp;
}
/DSURFpGXUH݊݅ݐ݈ܿ݁݁ܵ݅ݎݐ݀݅ݒሺݐܿ݁ݒ݁ݕݐሾሿǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏݐሻUpDOLVHOHWULSDULQVHUWLRQ
voidtriSelection(typevect[],intinf,intsup){
inti,j;
intpMin;
for(i=inf;i<sup;i++){
pMin=i;
for(j=i+1;j<=sup;j++)
if(vect[j]<vect[pMin])pMin=j;
if(pMin!=i)
permutation(&vect[i],&vect[pMin]);
}
}
7ULSDUPpWKRGHGHVEXOOHV
7ULSDULQVHUWLRQ
/HSULQFLSHGHFHWWHPpWKRGHGHWULHVWVHPEODEOHjFHOOHFLXWLOLVpSRXUWULHUXQSDTXHWGDQVXQ
MHXGHFDUWHV3RXUIDLUHWULHUFHVFDUWHVRQSUHQGXQHFDUWHSXLVODGHX[LqPHTXHO¶RQSDODFH
SDUDSSRUWjODSUHPLqUHFDUWHHQVXLWHODWURLVLqPHTXHO¶RQLQVqUHjVDSODFHHQIRQFWLRQGHV
GHX[FDUWHVSUpFpGHQWHVHWDLQVLGHVXLWH3RXUXQVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿOHSULQFLSHHVW
GRQFGHFRQVLGpUHUTXHOHVSUHPLHUVpOpPHQWVݐܿ݁ݒሾ݆ሿǡ ݆ אሾ݂݅݊Ǥ Ǥ ݅ െ ͳሿVRQWWULpVHWRQFKHUFKHj
SODFHU OH ݅°݉݁ pOpPHQW ݐܿ݁ݒሾ݅ሿ j VD SODFH SDUPL OHV pOpPHQWV GH VRXVYHFWHXU WULp
ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݅ െ ͳሿ8QIRLVOH݅°݉݁pOpPHQWHVWLQVpUpjVDSODFHRQUpSqWHOHPrPHWUDLWHPHQW
SRXUO¶pOpPHQWGHO¶LQGLFHVXLYDQWݐܿ݁ݒሾ݅ ͳሿHWMXVTX¶jFHTXH݅ ൌ ݑݏ3RXUpFULUHFHWWHSUR
FpGXUHRQSURSRVHGHIDLUHDSSHOjODSURFpGXUH݅݊݁݅ݎܶݐܸܿ݁݁ݎ݁ݏሺሻǢWHOOHTX¶HOOHHVWGpILQLHSUp
FpGHPPHQW
voidtriInserstion(typevect[],intinf,intsup){
inti=inf;
while(i<sup)
insereVectTrie(vect,sup+1,inf,&i,vect[i+1]);
}
'DQV OD SURFpGXUH ݊݅ݐݏݎ݁ݏ݊ܫ݅ݎݐሺሻ OD YDULDEOH ݅ VHUD LQFUpPHQWpH SDU OD SURFpGXUH
݅݊݁݅ݎܶݐܸܿ݁݁ݎ݁ݏሺሻDSUqVO¶LQVHUWLRQGHO¶pOpPHQWVݐܿ݁ݒሾ݅ ͳሿGDQVOHVRXVYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݅ሿ
/¶DOJRULWKPHܳݐݎܵ݇ܿ݅ݑHVWXQDOJRULWKPHGHWULTXLSRVVqGHGDQVOHFDVJpQpUDOGHPHLOOHXUHV
SHUIRUPDQFHVTXHOHVDOJRULWKPHVSUpFpGHQWV,OHVWEDVpVXUOHSULQFLSH©GLYLVHUSRXUUDQJHUª
TXHQRXVO¶DYRQVXWLOLVpGDQVO¶DOJRULWKPHGHUHFKHUFKHGLFKRWRPLTXH
6XSSRVRQV TXH QRXV D\RQV j WULHU OH VRXVYHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿDYHF ݂݅݊ ൏ ݑݏQRXV DO
ORQVVHJPHQWHUFHYHFWHXUHQWURLVVRXVYHFWHXUVWHOVTXH
7RXV OHV pOpPHQWV TXL VH WURXYHQW j JDXFKH GH SODFH א ݈݁ܿܽሾǤ Ǥ ݑݏሿ VRLHQW LQIpULHXUV RX
pJDX[ j ݐܿ݁ݒሾ݈݁ܿܽሿ HW TXH FHX[ VH WURXYDQW j GURLWH GH ݈݁ܿܽVRLHQW VXSpULHXUV GH
ݐܿ݁ݒሾ݈݁ܿܽሿǤ
+7(**$5
Chapitre 3 Vecteurs et algorithmes de tri
2Q FRQVWDWH TXH ݐܿ݁ݒሾ݈݁ܿܽሿ HVW FRUUHFWHPHQW UDQJp HW TX¶LO QH UHVWH SOXV TX¶j WULHU OHV VRXV
YHFWHXUVݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݈݁ܿܽെ ͳሿHWݐܿ݁ݒሾ ݈݁ܿܽ ͳǤ Ǥ ݑݏሿ
/DPpWKRGHFRQVLVWHGRQFGHGpILQLUXQHSURFpGXUHSHUPHWWDQWG¶HIIHFWXHUFHWWHVHJPHQWDWLRQ
݊݅ݐܽݐ݊݁݉݃݁ݏ݀݅ݒሺݐܿ݁ݒ݁ݕݐሾ ሿǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏݐǡ ݈݅݊݁ܿܽ כ ݐሻ3RXUFHODQRXVFKRLVLVVRQVXQH
YDOHXU DSSDUWHQDQW DX YHFWHXU ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿTXH O¶RQ DSSHOOH ࢚࢜ (QVXLWH RQ HIIHFWXH GHV
SHUPXWDWLRQVDILQGHFODVVHUOHVpOpPHQWVGXYHFWHXUݐܿ݁ݒSDUUDSSRUWjFHݐݒ݅2QYHXWREWH
QLU
/H FKRL[ GX ݐݒ݅HVW DUELWUDLUH RQ SHXW SUHQGUH SDU H[HPSOH ݐܿ݁ݒሾ݂݅݊ሿ ݐܿ݁ݒሾݑݏሿ RX
ݐܿ݁ݒሾሺ݂݅݊ ݑݏሻȀʹሿ'DQVO¶DOJRULWKPHVXLYDQWQRXVDOORQVFKRLVLUݐܿ݁ݒሾ݂݅݊ሿFRPPHݐݒ݅HW
QRXV DOORQV DXVVL FKRLVLU G¶HIIHFWXHU XQ SDUFRXUV GH ©JDXFKH j GURLWHª GX YHFWHXU
ݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ
voidsegmentation(typevect[],intinf,intsup,int*place){
intpivot;
inti,j;
pivot=vect[inf];
i=inf+1;
j=sup;
while(i<=j){
if(vect[i]<=pivot)
i++;
elseif(vect[j]>pivot)
jŞŞ;
elseif(i<j){
permutation(&vect[i],&vect[j]);
i++;
jŞŞ;}
}
permutation(&vect[inf],&vect[j]);
*place=j;
}
8QHIRLVODSURFpGXUHGHVHJPHQWDWLRQHVWGpILQLHLOQHUHVWHSOXVTX¶jGpILQLUODSURFpGXUHUp
FXUVLYH ݐݎܵ݇ܿ݅ݑݍሺݎݑ݁ݐܿ݁ݒ݁ݕݐሾሿǡ ݂݅݊݊݅ݐǡ ݅݊ݑݏݐሻ TXL IDLW DSSHO j OHXU WRXU j OD SURFpGXUH
݊݅ݐܽݐ݊݁݉݃݁ݏሺሻSRXUHIIHFWXHUOHWULGXYHFWHXUݐܿ݁ݒሾ݂݅݊Ǥ Ǥ ݑݏሿ
voidquickSort(typevect[],intinf,intsup){
intplace;
if(inf<sup){
segmentation(vect,inf,sup,&place);
quickSort(vect,inf,placeŞ1);
quickSort(vect,place+1,sup);
}
}
+7(**$5