Zum Inhalt springen

Benutzer:T-time/Heapsort

aus Wikisource, der freien Quellensammlung
void heapsort(int * a, int n) {                        //sortiere den vektor a[0..n]
    int tmp;
    for (int i=n/2; i>=0; i--) versickere(a, i, n);         //mache heap aus a[0..n]
    for (int i=n; i>=1;  i--) {                             //sortiere heap a[0..n]
        tmp=a[i]; a[i]=a[0]; a[0]=tmp;
        versickere(a, 0, i-1);                              //versickere a[0]
    }
}
void versickere(int * a, int i, int n) {   //versickere a[i] bis höchstens nach a[m]
    int j, tmp;
    while (2*i <= n) {                               //a[i] hat linken sohn
        j = 2*i;                                     //a[j] ist linker sohn von a[i]
        if (j<n)                                     //a[i] hat rechten sohn a[j+1]
            if (a[j] < a[j+1]) j++;                  //nun ist a[j] der größte sohn
        if (a[i] < a[j]) {
            tmp=a[i]; a[i]=a[j]; a[j]=tmp;           //vertausche a[i] mit a[j]
            i=j;                                     //versickere weiter
        }       
        else {
            i=n;                                     //beende schleife
            i++;                                     //für den fall n=0
        }    
    }        
}

Siehe auch: Heapsort in der deutschen Wikipedia.