堆排序
1. 堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。详情见堆排序【维基百科】
3. 堆排序C++实现
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 5 void HeapAdjust(vector<int> &array, int start, int end){ 6 int dad = start; 7 int son = 2 * dad + 1; 8 while(son <= end){ 9 if(son+1 <= end && array[son] <array[son+1]) 10 son += 1; 11 if(array[dad] > array[son]) 12 return ; 13 else{ 14 swap(array[son], array[dad]); 15 dad = son; 16 son = 2 * dad + 1; 17 } 18 } 19 } 20 21 void HeapSort(vector<int> &array){ 22 for(int i=array.size()/2; i>=0; i--){ 23 HeapAdjust(array, i, array.size()-1); 24 } 25 26 for(int j=array.size()-1; j>=0; j--){ 27 swap(array[0], array[j]); 28 HeapAdjust(array, 0, j-1); 29 } 30 } 31 32 int main(int argc, char const *argv[]) 33 { 34 vector<int> a = {5, 9, 0, 1, 3, 6, 4, 8, 2, 7}; 35 HeapSort(a); 36 for(auto &it : a) 37 cout<<it<<endl; 38 return 0; 39 }
3. 运行结果
0 1 2 3 4 5 6 7 8 9 [Finished in 1.4s]