//堆排序
#include<vector>
#include<iostream>
using namespace std;
void heapAdjust(int s,int t,vector<int>& array){//s,t从1开始,用于数组下标时要-1
int head=array[s-1];
for(int j=2*s;j<=t;j*=2){
if(j<t&&array[j-1]<array[j]) ++j;
if(head>=array[j-1]) break;=
array[s-1]=array[j-1];
s=j;
}
array[s-1]=head;///
return;
}
void swap(int& a,int& b){
int t=a;
a=b;
b=t;
}
void heapSort(vector<int>& array){
int size=array.size();
for(int i=size/2;i>=1;--i){//i从1开始
heapAdjust(i,size,array);
}
//排好了最后一个
for(int i=size;i>1;--i){//循环size-1次,最后只剩一个时不用交换
swap(array[0],array[i-1]);
heapAdjust(1,i-1,array);
}
}
int main(){
int size;
cin>>size;
vector<int> array(size);
for(int i=0;i<size;++i){
cin>>array[i];
}
//qSort(array);
heapSort(array);
for(int i=0;i<array.size();++i){
cout<<array[i]<<endl;
}
return 0;
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布