12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- //
- // Created by tangs on 2018/11/19.
- //
- #include <iostream>
- using namespace std;
- void AdjustDown(int A[], int k , int len) {
- A[0] = A[k];
- int i;
- for (i = 2 * k; i <= len; i *= 2) {
- if (i < len && A[i] < A[i + 1]) {
- i++;
- }
- if (A[0] >= A[i]) {
- break;
- } else {
- A[k] = A[i];
- k = i;
- }
- }
- A[k] = A[0];
- }
- void BuildMaxHeap(int A[], int len) {
- for (int i = len / 2; i > 0; i--) {
- AdjustDown(A, i, len);
- }
- }
- void MaxHeapSort(int A[], int len) {
- BuildMaxHeap(A, len);
- int i;
- for (i = len; i > 1; i--) {
- swap(A[i], A[1]);
- AdjustDown(A, 1, i - 1);
- }
- }
- int main(){
- int A1[] = {6, 1, 5, 2, 1, 9, 10, 24, 7, 0};
- MaxHeapSort(A1, 9);
- // print:
- // 0 0 1 1 2 5 7 9 10 24
- for (int i = 0; i < 10; i++) {
- cout << A1[i] << " ";
- }
- cout << endl;
- return 0;
- }
|