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
| void up(int* a, int u) { while (u > 0) { int p = (u - 1) >> 1; if (a[p] >= a[u]) break; swap(a[p], a[u]); u = p; } }
void down(int* a, int last, int u) { int cl = (u << 1) + 1; while (cl <= last) { if (cl + 1 <= last && a[cl] < a[cl + 1]) ++cl; if (a[u] >= a[cl]) break; swap(a[u], a[cl]); u = cl; cl = (u << 1) + 1; } }
void heap_sort(int* a, int len) { for (int i = 0; i < len; i++) up(a, i); int last = len - 1; while (last > 0) { swap(a[0], a[last--]); down(a, last, 0); } }
|