堆排序
堆排序:
利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为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 }
放得功名富贵之心下,便可脱凡;放的仁义道德之心下,才可入圣。