#include<iostream>
#include<vector>
using namespace std;
void heapify(vector<int>& v,int left,int right){
int dad = left;
int son = dad*2+1;
while(son<=right){
if(v[son]<v[son+1] && son+1<=right)
{
son++;
}
if(v[son]<v[dad])
return;
else if(v[son]>v[dad])
{
swap(v[son],v[dad]);
dad = son;
son = dad*2+1;
}
}
}
void HeapSort(vector<int>& v,int len){
for(int i=len/2-1;i>=0;i--){
heapify(v,i,len-1);
}
for(int i=len-1;i>0;i--){
swap(v[0],v[i]);
heapify(v,0,i-1);
}
}
int main()
{
int n =0;
cin>>n;
vector<int> v(n);
for(int i=0;i<n;i++){
v[i] =rand();
}
for(auto&it:v){
cout<<it<<' ';
}
cout<<endl;
HeapSort(v,n);
for(auto&it:v){
cout<<it<<' ';
}
return 0;
}
C++ 堆排序
猜你喜欢
转载自blog.csdn.net/lzq6261/article/details/133386118
今日推荐
周排行