堆排序
Posted ren-yu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。
1 inline int LEFT(int i) 2 { 3 return (i * 2 + 1); 4 } 5 6 inline int RIGHT(int i) 7 { 8 return (i * 2 + 2); 9 } 10 11 void swap(int &i, int &j) 12 { 13 int temp = i; 14 i = j; 15 j = temp; 16 } 17 18 void max_heapify(int a[], int n, int i) 19 { 20 int left = LEFT(i); 21 int right = RIGHT(i); 22 int max_idx = (left < n && a[i] < a[left]) ? left : i; 23 max_idx = (right < n && a[max_idx] < a[right]) ? right : max_idx; 24 if (i == max_idx) { 25 return; 26 } 27 swap(a[i], a[max_idx]); 28 max_heapify(a, n, max_idx); 29 } 30 31 void build_max_heap(int a[], int n) 32 { 33 for (int i = n / 2 - 1; i >= 0; i--) { 34 max_heapify(a, n, i); 35 } 36 } 37 38 void heap_sort(int a[], int n) 39 { 40 build_max_heap(a, n); 41 for (int i = n - 1; i > 0; i--) { 42 swap(a[i], a[0]); 43 max_heapify(a, i, 0); 44 } 45 }
以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章