Benutzer:T-time/Heapsort
Erscheinungsbild
C++
[Bearbeiten]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.