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);
}
}