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