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 50 51
| #define _CRT_SECURE_NO_WARNINGS #include "iostream" #include "cstring" #include "cstdlib" #include "algorithm" using namespace std; void heapInsert(int* arr, int i) { while (arr[(i - 1) / 2] < arr[i]) { swap(arr[(i - 1) / 2], arr[i]); i = (i - 1) / 2; } }
void heapify(int *arr, int i, int n) { int left = (i << 1) + 1, right = left + 1; while (left <= n) { int largest = i; if (arr[largest] < arr[left]) largest = left; if (right <= n && arr[largest] < arr[right]) largest = right; if (largest == i) break; swap(arr[largest], arr[i]); i = largest; left = (i << 1) + 1, right = left + 1; } }
int main() { int arr[] = { 1,3,5,7,9,2,4,6,10,8 }; int n = sizeof(arr) / sizeof(int);
for (int i = 0; i < n; ++i) heapInsert(arr, i);
for (int i = 1; i < n; ++i) { swap(arr[0], arr[n - i]); heapify(arr, 0, n - 1 - i); }
for (int i = 0; i < n; ++i) printf("%d ", arr[i]); return 0; }
|