1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
template<class T>
void HeapSort(T *c,long n) // on a un tableau sur lequel on travaille par adresse memoire
{
long l,j,r,i;
T crit;
c--; // on decale de 1 pour que le tableau commence a 1
if( n <= 1) return;
l = n/2 + 1;
r = n;
while (1) { // label 2
if(l <= 1 ) { // label 20
crit[0] = c[r][0];
c[r--][0] = c[1][0];
crit[1] = c[r][1];
c[r--][1] = c[1][1];
if ( r == 1 ) { c[1][0]=crit[0]; c[1][1]=crit[1]; return;}
}
else {crit[0] = c[--l][0]; crit[1] = c[--l][1]; }
j=l;
while (1) {// label 4
i=j;
j=2*j;
if (j>r) {c[i][0]=crit[0]; c[i][1]=crit[1];
break;}
if ((j<r) && (c[j][0] < c[j+1][0])) j++; // L5
if (crit[0] < c[j][0]) { c[i][0]=c[j][0]; c[i][1]=c[j][1];
}
else {c[i][0]=crit[0];c[i][1]=crit[1];
break;}
} |
Partager