首页 > 代码库 > 堆排序
堆排序
1 #include<iostream> 2 using namespace std; 3 int heap[101]; 4 int heap_size; 5 void put(int d) //heap[1]为堆顶 插入 6 { 7 int now, next; 8 heap[++heap_size] = d; 9 now = heap_size;10 while(now > 1)11 {12 next = now/2;// 父节点 13 if(heap[now] >= heap[next]) 14 break;15 swap(heap[now], heap[next]);16 now = next;17 }18 }19 int get() //heap[1]为堆顶 获取 20 {21 int now=1, next, res= heap[1];22 heap[1] = heap[heap_size--];//取出末尾元素 23 while(now * 2 <= heap_size)24 {25 next = now * 2;// next 左孩子 26 if (next < heap_size && heap[next + 1] < heap[next])27 next++;28 if (heap[now] <= heap[next]) 29 break;30 swap(heap[now], heap[next]);31 now = next;32 }33 return res;34 }35 36 int main()37 {38 int n;39 cin>>n;40 for(int i=1;i<=n;i++)41 {42 int dr;43 cin>>dr;44 put(dr);45 }46 for(int i=1;i<=n;i++)47 {48 cout<<get()<<endl;49 }50 return 0;51 }
堆排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。