Heapsort: Difference between revisions
From Wiki**3
No edit summary |
|||
Line 5: | Line 5: | ||
#define pq(A) a[l-1+A] | #define pq(A) a[l-1+A] | ||
void heapsort(Item a[], int l, int r) { | void '''heapsort'''(Item a[], int l, int r) { | ||
int k, N = r-l+1; | int k, N = r-l+1; | ||
for (k = N/2; k >= 1; k--) | for (k = N/2; k >= 1; k--) | ||
fixDown(&pq(0), k, N); | '''fixDown'''(&pq(0), k, N); | ||
while (N > 1) { | while (N > 1) { | ||
exch(pq(1), pq(N)); | exch(pq(1), pq(N)); | ||
fixDown(&pq(0), 1, --N); | '''fixDown'''(&pq(0), 1, --N); | ||
} | } | ||
} | } |
Latest revision as of 13:50, 19 May 2005
Introdução
Implementação
#define pq(A) a[l-1+A] void heapsort(Item a[], int l, int r) { int k, N = r-l+1; for (k = N/2; k >= 1; k--) fixDown(&pq(0), k, N); while (N > 1) { exch(pq(1), pq(N)); fixDown(&pq(0), 1, --N); } }