堆排序

  

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[100];
int n,m;
void sdown(int i){
	if(i==n)
	return ;
	int flag=0;
		while(i*2<=n&&!flag){
			//cout<<i<<" "<<a[i]<<endl;
			if(a[i*2]<a[i*2+1]||i*2+1>n){
					if(a[i*2]<a[i]){
						swap(a[i*2],a[i]);
						i*=2;
					}else{
						flag=1;
					}
			}else{
				if(a[i*2+1]<a[i]){
					swap(a[i*2+1],a[i]);
					i=i*2+1;
				}else{
					flag=1;
				}
			}
		}
		return ;
}
void buil(){
	for(int i=n/2;i>=1;i--){
		sdown(i);
	}
}
void ssort(){
	while(n!=0){
	cout<<a[1]<<endl;
	a[1]=a[n];
	n--;
	sdown(1);
	}
}

int main()
{
	while(cin>>n){
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		buil();
		ssort();
	}
	return 0;
} 

  

posted @ 2018-04-28 17:01  松手丶明晃晃  阅读(99)  评论(0编辑  收藏  举报