排序---堆排序

堆排序

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]

猜你喜欢

转载自www.cnblogs.com/iwangzhengchao/p/9846487.html