给定一组数据,使用堆排序完成数据的降序排序。(建小顶堆)。
标签:++ 除了 turn void 筛选 oid swa main 其他
给定一组数据,使用堆排序完成数据的降序排序。(建小顶堆)。
数据个数n,n个整数数据
初始创建的小顶堆序列
每趟交换、筛选后的数据序列,输出格式见样例
#include<iostream> using namespace std; void printnum(int *num,int n) { cout<<n<<" "; for(int i=0;i<n;i++) { if(i!=n-1) cout<<num[i]<<" "; else cout<<num[i]<<endl; } } void adjust(int *num,int i,int n)///除了刚换的顶其他都满足堆性质 { int s;///小顶堆,降序排列 while(2*i+1<n) { s=2*i+1; if(s+1<n&&num[s]>num[s+1])///有右孩子并且右孩子比左孩子小 s++; if(num[i]>num[s]) { swap(num[i],num[s]); i=s; } else break; } } void Heapsort(int *num,int n)///数组建堆 { int i; for(i=n/2;i>=0;i--) { adjust(num,i,n); }//建堆 printnum(num,n); for(i=1;i<n;i++) { swap(num[0],num[n-i]);//堆顶出去,最底下的一个上来 //printnum(num,n); adjust(num,0,n-i);//调整 printnum(num,n); } } int main() { int n; cin>>n; int *num=new int[n]; for(int i=0;i<n;i++) cin>>num[i]; Heapsort(num,n); return 0; }
标签:++ 除了 turn void 筛选 oid swa main 其他
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12183110.html