首页 > 代码库 > 堆排序【模板】
堆排序【模板】
1 #include <algorithm> 2 #include <cstdio> 3 4 using namespace std; 5 6 int x,size,n; 7 int heap[1000005]; 8 9 void push(int x)10 {11 int now,next;12 heap[++size]=x;13 now=size;14 while(now>1)15 {16 next=now/2;17 if(heap[next]<=heap[now]) return ;18 swap(heap[next],heap[now]);19 now=next;20 }21 }22 23 int pop()24 {25 int now,next;26 int ret=heap[1];27 heap[1]=heap[size--];28 now=1;29 while(now*2<=size)30 {31 next=now*2;32 if(next<size&&heap[next]>heap[next+1]) next++;33 if(heap[now]<=heap[next]) return ret;34 swap(heap[now],heap[next]);35 now=next;36 }37 return ret;38 }39 40 int main()41 {42 scanf("%d",&n);43 for(int i=1;i<=n;i++)44 {45 scanf("%d",&x);46 push(x);47 }48 for(int i=1;i<n;i++) 49 {50 int ans=pop();51 printf("%d ",ans);52 }53 printf("%d\n",pop());54 return 0;55 }
堆排序【模板】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。