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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <stdio.h> #include <stdlib.h> void swap(int &a, int &b) { int temp = a; a = b; b = temp; } void adjust_heap(int *a, int cur, int n) { int left, right; while (true) { left = 2 * cur + 1; right = 2 * cur + 2; int index = cur; if (left < n && a[left] > a[index]) { index = left; } if (right < n && a[right] > a[index]) { index = right; } if (index != cur) { swap(a[cur], a[index]); cur = index; } else { break; } } } void build_heap(int *a, int n) { for (int i = (n - 1) / 2; i >= 0; i--) { adjust_heap(a, i, n); } } void heap_sort(int *a, int n) { build_heap(a, n); for (int i = n - 1; i > 0; i--) { swap(a[0], a[i]); adjust_heap(a, 0, i); } } int main() { int a[] = {10, 2, 5, 7, 6, 13 , 8, 7}; int n = sizeof(a) / sizeof(int); heap_sort(a, n); for (int i = 0; i < n - 1; i++) { printf("%d ", a[i]); } printf("%d\n", a[n - 1]); return 0; }
|