求调
查看原帖
求调
1007041
zhaozichu楼主2024/8/28 22:20

#include<bits/stdc++.h>
using namespace std;
int n,a[1000005],k=1,top;
vector<int>ans;
void adjust(int i)
{
	if(i>n)return;
	int j;
	if(a[i*2+1]>a[i*2])j=i*2+1;
	else j=i*2;
	if(a[i]>a[j])
	{
		return;
	}
	else
	{
		swap(a[i],a[j]);
		adjust(j); 
	}
 } 
 void zd()//造堆 
 {
 	for(int i=n/2;i>=1;i--)
	{
		adjust(i);
	}
 }
 void px()//排序 
 {
 	for(int i=1;i<=n;i++)
 	{
 		
//cout<<a[top]<<endl;
//		cout<<top<<endl; 
 		ans.push_back(a[1]);
 		
//		a[1]=a[top];
 		swap(a[1],a[top]);
 		top--;
 		adjust(1);
// 		for(int i=1;i<=n;i++)cout<<a[i]<<' ';
//	cout<<endl;
	 }
 }
int main(){
	cin>>n;
	
	for(int i=1;i<=n;i++)cin>>a[i];
	zd();
	top=n;
//	for(int i=1;i<=n;i++)cout<<a[i]<<' ';
//	cout<<endl;
//	adjust(2);
	px();
	for(int i=ans.size()-1;i>=0;i--)cout<<ans[i]<<" ";
	return 0;
}

用的堆排序,麻烦daolao看一下

2024/8/28 22:20
加载中...