Vous êtes sur la page 1sur 13

Chapitre 3 Vecteurs et algorithmes de tri

 

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

8QpOpPHQWGXYHFWHXUHVWQRWpSDUܸሾ݅ሿDYHF݅ ‫ א‬ሾͳǤ Ǥ ݊ሿ

x ݁ ‫ܸ א‬ሾͳǤ Ǥ ݊ሿVLJQLILHTXH‫ א ݆׌‬ሾͳǤ Ǥ ݊ሿǡ ݁ ൌ ܸሾ݆ሿ

x ݁ ‫ܸ ב‬ሾͳǤ Ǥ ݊ሿVLJQLILHTXH‫ א ݆׊‬ሾͳǤ Ǥ ݊ሿǡ ݁ ് ܸሾ݆ሿ

x ݁ ൏ ܸሾͳǤ Ǥ ݊ሿVLJQLILHTXH‫ א ݆׊‬ሾͳǤ Ǥ ݊ሿǡ ݁ ൏ ܸሾ݆ሿ

+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ܸ

/DWDLOOH ܶ ‫ܰ א‬G¶XQYHFWHXUHVWOHQRPEUHPD[LPDO GHVHVpOpPHQWVTXHO¶RQSHXWGpGXLUHGH


O¶LQWHUYDOOHGHVLQGLFHV‫ܫ‬3DUH[HPSOHVL‫ ܫ‬ൌ ሾͳǤ Ǥ ݊ሿRQGpGXLWTXHODWDLOOHGXܸHVW݊GDQVOH
FDV GH ‫ ܫ‬ൌ ሾͲǤ Ǥ ݊ሿ LFL OD WDLOOH GX YHFWHXU HVW ݊ ൅ ͳ 3OXV IRUPHOOHPHQW VL ܸǯሾ݂݅݊Ǥ Ǥ ‫݌ݑݏ‬ሿ HVW XQ
VRXVYHFWHXUGHܸሾͲǤ Ǥ ݊ሿODWDLOOHGHVRXVYHFWHXUܸǯHVWܶ ൌ ሺ‫ ݌ݑݏ‬െ ݂݅݊ሻ ൅ ͳ6Lܶ ൌ ͲOHVRXV
YHFWHXUܸǯHVWGLWXQYHFWHXUYLGH'DQVOHFDVRܶ ൏ ͲRQGLWTXHOHVGHX[ERUQHV݂݅݊HW‫݌ݑݏ‬
GHVRXVYHFWHXUܸǯVRQWLQYDOLGHV

/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];

'DQVFHWWHGpFODUDWLRQO¶LQGLFH RXLQGH[ GXSUHPLHUpOpPHQWHVWͲ'RQFO¶LQWHUYDOOHGHVLQGLFHV


HVW ‫ ܫ‬ൌ ሾͲǤ Ǥͻͻሿ $XWUHPHQW GLW OH GHUQLHU pOpPHQW GDQV OH YHFWHXU VH WURXYH j O¶LQGLFH  HW LO
Q¶H[LVWHSDVGDQVOHYHFWHXU‫ݐܿ݁ݒ‬XQpOpPHQWDYHFO¶LQGLFH>@RXSOXVHQFRUH

‫ ݆ݐݑ݋ݐݎݑ݋݌‬൒ ݊݉ܽ‫ ݆ݑ݋ݔ‬൏ Ͳǡ ‫ݐܿ݁ݒ‬ሾ݆ሿ ‫ݐܿ݁ݒ ב‬ሾͲǤ Ǥ ݊݉ܽ‫ ݔ‬െ ͳሿ

6HORQFHWWHGpFODUDWLRQSRXUWRXWLQGLFH݅ ‫ א‬ሾͲǤ Ǥ ሺ݊݉ܽ‫ ݔ‬െ ͳሻሿO¶RSpUDWLRQG¶LQGLoDJHQRWpH‫ݐܿ݁ݒ‬ሾ݅ሿ


GpOLYUH OD YDOHXU GH O¶pOpPHQW G¶LQGLFH ݅ GX YHFWHXU FHWWH YDOHXU SHXW rWUH DIIHFWpH j XQH YD

+7(**$5  
Chapitre 3 Vecteurs et algorithmes de tri
 

ULDEOHSDUH[HPSOH‫ ݔ‬ൌ ‫ݐܿ݁ݒ‬ሾ݅ሿHWYLFHYHUVD‫ݐܿ݁ݒ‬ሾ݅ሿ ൌ ‫'ݔ‬HPrPHRQSHXWUDQJHUXQHYDOHXU


GDQVOHièmepOpPHQWSDUODIRQFWLRQG¶HQWUpH‫݂݊ܽܿݏ‬

'DQVO¶H[HPSOHVXLYDQWODSURFpGXUH‫ݎݑ݁ݐܸܿ݁݁ݎ݈݅݀݅݋ݒ‬ሺ࢚࢟࢖ࢋ‫ݐܿ݁ݒ‬ሾሿǡ ࢏࢔࢚݂݅݊ǡ ࢏࢔࢚‫݌ݑݏ‬ሻSHUPHWGH


OLUHOHVYDOHXUVGHVpOpPHQWVG¶XQVRXVYHFWHXU‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ‫݌ݑݏ‬ሿ.,FL‫݁݌ݕݐ‬SHXWrWUHQ¶LPSRUWHTXHO
W\SHGHYDULDEOH([HPSOHW\SHHQWLHUGpILQLHSDUtypedefinttype.

 ([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ܸ

'DQVO¶H[HPSOHVXLYDQWODSURFpGXUH‫݁ݐܫݎݑ݁ݐܸ݄݂݂ܿ݁݁ܿ݅ܽ݀݅݋ݒ‬ሺ࢚࢟࢖ࢋ‫ݒ‬ሾሿǡ ࢏࢔࢚݂݅݊ǡ ࢏࢔࢚‫݌ݑݏ‬ሻǢSHUPHW


G¶DIILFKHUOHVYDOHXUVGHVpOpPHQWVVHORQXQSDUFRXUV©GHJDXFKHjGURLWHª.DDQVFHTXLVXLW
RQSURSRVHXQHYHUVLRQLWpUDWLYHGHFHWWHIRQFWLRQ

 ([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

(FULUHXQHGHX[LqPHYHUVLRQUpFXUVLYH ‫ܴܿ݁ݎݑ݁ݐܸ݄݂݂ܿ݁݁ܿ݅ܽ݀݅݋ݒ‬ሺ࢚࢟࢖ࢋ‫ݒ‬ሾሿǡ ࢏࢔࢚݂݅݊ǡ ࢏࢔࢚‫݌ݑݏ‬ሻǢSRXU


DIILFKHUXQYHFWHXU‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ‫݌ݑݏ‬ሿǤ

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

/DSUHPLqUHVROXWLRQ H[HPSOH FRQVLVWHUDjVXSSRVHUTXHODYDOHXUUHFKHUFKpHQ¶H[LVWHSDV


(QFRPPHQoDQWODUHFKHUFKHDYHFFHWWHK\SRWKqVHRQXWLOLVHXQHYDULDEOH‫ݎ݁ݒݑ݋ݎݐ‬LQLWLDOLVpHj
 ‫ ݎ݁ݒݑ݋ݎݐ‬ൌ Ͳ HWWDQWTXHFHWWHK\SRWKqVHUHVWHYpULILpHHW݅ ‫ א‬ሾ݂݅݊Ǥ Ǥ ‫݌ݑݏ‬ሿRQIDLWXQSDUFRXUV
GDQV OH YHFWHXU ©pOpPHQW SDU pOpPHQWª HQ YpULILDQW V¶LO H[LVWH XQ pOpPHQW ‫ݐܿ݁ݒ‬ሾ݅ሿ ൌ ‫  ݈ܽݒ‬6L
F¶HVWOHFDVDORUVRQVRUWLPPpGLDWHPHQWGHODERXFOHDYHF‫ ݎ݁ݒݑ݋ݎݐ‬ൌ ͳHW݅ ൑ ‫݌ݑݏ‬VLQRQGDQV
OHFDVRDXFXQpOpPHQW‫ݐܿ݁ݒ‬ሾ݅ሿQ¶DYpULILpODFRQGLWLRQ‫ݐܿ݁ݒ‬ሾ݅ሿ  ൌ ‫݈ܽݒ‬DORUVRQVRUWGHODERXFOH
‫݁ݑݍݐ݊ܽݐ‬DYHF݅ ൐ ‫݌ݑݏ‬

 ([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

x &DV݅ ൐ ‫݌ݑݏ‬ORUVTXHDXFXQpOpPHQW‫ݒ‬ሾ݅ሿQ¶DYpULILpODFRQGLWLRQ‫ݐܿ݁ݒ‬ሾ݅ሿ ൌ ‫݈ܽݒ‬HWGDQV


FHFDVODIRQFWLRQUHQYRLH

/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‫ݐܿ݁ݒ‬ሾ݂݅݊ሿ ൌ ‫݈ܽݒ‬HWGDQVFHFDVODIRQFWLRQ݁‫͵ܸ݁ݐܫ݁ݐݏ݅ݔ‬ሺሻGRLW


UHQYR\HUODYDOHXU

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

(FULUH XQH TXDWULqPH YHUVLRQ UpFXUVLYH ݅݊‫ܴܿ݁݁ݐݏ݅ݔ݁ݐ‬ሺ‫ݐܿ݁ݒ݁݌ݕݐ‬ሾሿǡ ݅݊‫݂݊݅ݐ‬ǡ ݅݊‫݌ݑݏݐ‬ǡ ‫݈ܽݒ݁݌ݕݐ‬ሻǢ


SRXUUHFKHUFKHUXQHYDOHXU‫݈ܽݒ‬GDQVXQVRXVYHFWHXU‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ‫݌ݑݏ‬ሿǤ

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


 ݁௜௡௙  ݁  ݁௣௢௦ ݁௦௨௣ᇱ

inf pos sup’=sup+1 nmax-1




3UpFRQGLWLRQ

/¶LQVHUWLRQHVWSRVVLEOHVLHWVHXOHPHQWVL‫ ݌ݑݏ‬൏ ሺ݊݉ܽ‫ ݔ‬െ ͳሻHW‫ א ݏ݋݌‬ሾ݂݅݊Ǥ Ǥ ሺ‫ ݌ݑݏ‬൅ ͳሻሿ$XWUH


PHQWGLWRQSHXWLQVpUHUXQpOpPHQWVDXIVLOHYHFWHXUQ¶HVWSDVSOHLQ‫ ݌ݑݏ‬൏ ሺ݊݉ܽ‫ ݔ‬െ ͳሻHWOD
SRVLWLRQ ‫ ݏ݋݌‬HVW XQH SRVLWLRQ YDOLGH HQWUH OD SUHPLqUH SRVLWLRQ ݂݅݊ HW OD GHUQLqUH SRVLWLRQ
‫ ݌ݑݏ‬൅ ͳ 

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݂݅݊ ൐ ‫݌ݑݏ‬RQGLWTXHOHYHFWHXU‫ݐܿ݁ݒ‬HVWWULp YHFWHXUYLGH 

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

x ,OUHVWHWRXMRXUVXQpOpPHQWjYpULILHU ݅ ൑ ‫ ݌ݑݏ‬

x /DYDOHXUV‫݈ܽݒ‬UHVWHVWULFWHPHQWLQIpULHXUHGHO¶pOpPHQW‫ݐܿ݁ݒ‬ሾ݅ሿ RX‫ ݈ܽݒ‬൏ ‫ݐܿ݁ݒ‬ሾ݅ሿ 

&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
 

 5HFKHUFKHGLFKRWRPLTXH UHFKHUFKHELQDLUH RX ELQDU\VHDUFK 

/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 ‫ݐܿ݁ݒ‬ሾሺ݈݉݅݅݁‫ ݑ‬൅ ͳሻǤ Ǥ ‫݌ݑݏ‬ሿ 

x 6LOHQRXYHDXVRXVYHFWHXUHVWYLGH ݂݅݊ ൐ ‫ ݌ݑݏ‬DUUrWHUOHWUDLWHPHQWHQUHQYR\DQWODYD


OHXU YDOHXU‫݈ܽݒ‬Q¶H[LVWHSDV 
intrechercheDicho(typevect[],intinf,intsup,typeval){
inttrouve=0;
intmilieu;
 if(val<vect[inf])return0;
 else{
  while(trouve==0&&inf<=sup){
   milieu=(inf+sup)/2;
   if(vect[milieu]==val)trouve=1;
   elseif(vect[milieu]<val)inf=milieu+1;
    elsesup=milieuŞ1;
  }
 }
returntrouve; 
}

+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

,OFRQVLVWHjSDUFRXULUOHVRXVYHFWHXU‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ‫݌ݑݏ‬ሿHQSHUPXWDQWWRXWHSDLUHG pOpPHQWVFRQ


VpFXWLIV ‫ݐܿ݁ݒ‬ሾ݇ሿHW‫ݐܿ݁ݒ‬ሾ݇ ൅ ͳሿ QRQRUGRQQpV$SUqVOHSUHPLHUSDUFRXUVOHSOXVJUDQGpOpPHQW
VHUHWURXYHGDQVOHGHUQLHULQGLFHGXVRXVYHFWHXUF HVWjGLUHHQ‫ݐܿ݁ݒ‬ሾ‫݌ݑݏ‬ሿHWLOUHVWHGRQFj
DSSOLTXHUODPrPHSURFpGXUHVXUOHVRXVYHFWHXU‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ሺ‫ ݌ݑݏ‬െ ͳሻሿǤ&HWWHPpWKRGHjODSUR
SULpWpGHGpWHFWHUVLOHYHFWHXUHVWWRWDOHPHQWWULp'DQVOHFDVRDXFXQHSHUPXWDWLRQGHGHX[
pOpPHQWVFRQVpFXWLIVQ¶HVWHIIHFWXpHRQV¶DUUrWHOHWUDLWHPHQW VHTXLH[SOLTXHOHU{OHGHODYD
ULDEOHܿ‫ ݎ݁ݑ݊݅ݐ݊݋‬
voidtriBulle(typevect[],intinf,intsup){
intcontinuer=1;
inti=sup;
intj=inf;
while(continuer){
while(i>inf&&continuer){
continuer=0;
for(j=inf;j<i;j++)
if(vect[j]>vect[j+1]){
 permutation(&vect[j],&vect[j+1]);
continuer=1;
}
i=iŞ1;
}
}
}
+7(**$5  
Chapitre 3 Vecteurs et algorithmes de tri
 

 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‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ݅ሿ

 7ULSDUVHJPHQWDWLRQ 4XLFN6RUW 

/¶DOJRULWKPHܳ‫ݐݎ݋ܵ݇ܿ݅ݑ‬HVWXQDOJRULWKPHGHWULTXLSRVVqGHGDQVOHFDVJpQpUDOGHPHLOOHXUHV
SHUIRUPDQFHVTXHOHVDOJRULWKPHVSUpFpGHQWV,OHVWEDVpVXUOHSULQFLSH©GLYLVHUSRXUUDQJHUª
TXHQRXVO¶DYRQVXWLOLVpGDQVO¶DOJRULWKPHGHUHFKHUFKHGLFKRWRPLTXH

6XSSRVRQV TXH QRXV D\RQV j WULHU OH VRXVYHFWHXU ‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ‫݌ݑݏ‬ሿDYHF ݂݅݊ ൏ ‫  ݌ݑݏ‬QRXV DO
ORQVVHJPHQWHUFHYHFWHXUHQWURLVVRXVYHFWHXUVWHOVTXH


൑ ൐

 inf place sup nmax-1

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
‫ݐܿ݁ݒ‬ሾ‫݈݁ܿܽ݌‬ሿǤ

2QSHXWpFULUH‫ݐܿ݁ݒ‬ሾ݂݅݊Ǥ Ǥ ‫ ݈݁ܿܽ݌‬െ ͳሿ ൑ ‫ݐܿ݁ݒ‬ሾ‫݈݁ܿܽ݌‬ሿ ൏ ‫ݐܿ݁ݒ‬ሾ‫ ݈݁ܿܽ݌‬൅ ͳǤ Ǥ ‫݌ݑݏ‬ሿ

+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  

Vous aimerez peut-être aussi