【模板】快速排序
P1177 【模板】快速排序
【 堆排序 】
时间复杂度:O(nlogn) PS:OI界的log都是以2为底数
空间复杂度:O(n)
[ 代码 ]:
#include<bits/stdc++.h> using namespace std; long long n,x,heap_size; int heap[100001]; void put(int d) { int now,next; heap[++heap_size]=d; now=heap_size; while(now>1) { next=now>>1; if(heap[now]>=heap[next]) break; //小根堆
// if(heap[now]<=heap[next]) break; //大根堆 else swap(heap[now],heap[next]); now=next; } } int get() { int now,next,res; res=heap[1]; heap[1]=heap[heap_size--]; now=1; while(now*2<=heap_size) { next=now*2; if(next<heap_size&&heap[next+1]<heap[next]) next++; //小根堆
// if(next<heap_size&&heap[next+1]>heap[next]) next++; //大根堆 if(heap[now]>heap[next]) //小根堆
// if(heap[now]<heap[next]) //大根堆 swap(heap[now],heap[next]); now=next; } return res; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x); put(x); } for(int i=1;i<=n;i++) cout<<get()<<" "; return 0; }
【简练版本】
使用C++标准模板库STL(需要头文件 algorithm)
#include<bits/stdc++.h> #include<algorithm> using namespace std; long long n,x,heap_size; int heap[100001]; void put(int d) { heap[++heap_size]=d; // push_heap(heap+1,heap+heap_size+1); //大根堆 push_heap(heap+1,heap+heap_size+1,greater<int>()); //小根堆 } int get() { // pop_heap(heap+1,heap+heap_size+1); //大根堆 pop_heap(heap+1,heap+heap_size+1,greater<int>()); //小根堆 return heap[heap_size--]; }
【 快排 】
时间复杂度:O(nlogn) PS:OI界的log都是以2为底数
空间复杂度:O(nlogn)
[ 代码 ]:(从小到大)
#include<bits/stdc++.h> using namespace std; long long n; int a[100001]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步