HeapSort
1. HeapSort : ? 選擇排序、不穩定排序
2. Time Complexity : ?O(nlongn)
3. Step:
1. 最大堆調整
2. 創建最大堆
3. 堆排序
?
4. Code:
1 void HeapAdjust(int src[], int i, int len) 2 { 3 int l = 2 * i + 1; //左孩子 4 int r = 2 * i + 2; //右孩子 5 int largest = 0; 6 7 if (l < len && src[l] > src[i]) 8 largest = l; 9 else 10 largest = i; 11 12 if (r < len && src[r] > src[largest]) 13 largest = r; 14 15 if (largest != i) { 16 int tmp; 17 18 tmp = src[i]; 19 src[i] = src[largest]; 20 src[largest] = tmp; 21 22 HeapAdjust(src, largest, len); //swap可能破壞原來已是最大堆的子樹,遞歸調整子樹 23 } 24 } 25 26 void HeapSort(int src[], int len) 27 { 28 int i; 29 30 for (i = len / 2; i >= 0; --i) 31 HeapAdjust(src, i, len); //創建最大堆,len/2以后全為葉子節點,即已為最大堆,則調整len/2前的節點 32 33 for (i = len - 1; i >=0; i--) { 34 int tmp; 35 36 tmp = src[i]; 37 src[i] = src[0]; 38 src[0] = tmp; 39 40 len--; 41 HeapAdjust(src, 0, len); //遞歸排序,每次遞歸找出最大數,有序數加一,len-- 42 } 43 }轉載于:https://www.cnblogs.com/robin-he0221/archive/2012/09/02/HeapSort.html
總結
- 上一篇: Across the universe
- 下一篇: [@Controller]4 详解@Mo