南邮 OJ 1066 堆排序

来源:互联网 发布:淘宝童装模特丫丫 编辑:程序博客网 时间:2024/05/29 04:07

堆排序

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 365            测试通过 : 204 

比赛描述

给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中堆排序算法进行排序,并输出排序最后结果的相应序列。



输入

共两行,第一行给出排序元素数目n,第二行给出n个元素,1n100000,每个元素值范围为 [0100000)

输出

一行,输出排序结果。

样例输入

7
48 36 68 72 12 48 2

样例输出

2 12 36 48 48 68 72

提示

 数据结构A实验四

题目来源

CHENZ


#include<iostream>using namespace std;template<typename T>void maxHeapify(T* a,long n,long i){int l=i*2+1,r=l+1;while(r<n){if(a[i]>a[l] && a[i]>a[r])return;if(a[l]>a[r]){swap(a[i],a[l]);i = l;}else{swap(a[i],a[r]);i = r;}l = i*2+1;r = l+1;}if(l<n && a[l]>a[i])swap(a[l],a[i]);return;}template<typename T>void hSort(T* a,long n){long i;for(i=n-1;i>=0;--i)maxHeapify(a,n,i);while(n){swap(a[n-1],a[0]);--n;maxHeapify(a,n,0);}}int main(){long i,n,a[100000];cin>>n;for(i=0;i<n;++i)cin>>a[i];hSort(a,n);cout<<a[0];for(i=1;i<n;++i)cout<<" "<<a[i];cout<<endl;}





0 0
原创粉丝点击