堆排序

堆排序:

利用这种数据结构而设计的一种排序算法,堆排序是一种选择排序它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。

(不知道堆的,自行百度)

堆排序的基本思路:

  a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;

  b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;

  c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。

至于实现的话,C++有stl(优先队列啊),干嘛非得手写堆。

 

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstdio>
 4 #include<cstring>
 5 #include<string>
 6 #include<queue>
 7 #include<cmath>
 8 #define ll long long
 9 #define DB double
10 #define inf 214748360000
11 #define mod 1000000007
12 using namespace std;
13 int n;
14 struct node{
15     int x;
16     friend bool operator <(node a,node b)
17     {
18         return a.x>b.x;
19     }
20 };
21 priority_queue<node>q;
22 int main()
23 {
24     scanf("%d",&n);
25     for(int i=1;i<=n;++i)
26     {
27         int x;scanf("%d",&x);
28         q.push((node){x});
29     }
30     while(!q.empty())
31     {
32        cout<<q.top().x<<" ";
33        q.pop();    
34     }
35     return 0;
36 }
View Code

放得功名富贵之心下,便可脱凡;放的仁义道德之心下,才可入圣。

 

posted @ 2018-02-28 17:05  月亮茶  阅读(198)  评论(0编辑  收藏  举报