#include<fstream>
using namespace std;
void FilterUp(int arr[],int i);
void FilterDown(int arr[],int i,int n);
void Heapsort(int arr[],int n);
int main(void){
int num[100010],n;
int i,j;
ifstream in("test5.in");
ofstream out("test.out");
in>>n;
for(i=1;i<=n;i++)
in>>num[i];
Heapsort(num,n);
for(i=1;i<=n;i++) out<<num[i]<<" ";
system("pause");
return 0;
}
void FilterUp(int i);
void FilterDown(int i);
void Heapsort(int arr[],int n){
int i,j,t,step;
//Build Heap
for(i=2;i<=n;i++) FilterUp(arr,i);
//Sort
step = n;
for(i=1;i<step;i++){
t = arr[1];
arr[1] = arr[n];
arr[n] = t;
n--;
FilterDown(arr,1,n);
}
}
void FilterUp(int arr[],int i){
int temp;
temp = arr[i];
while(i>1){
if(arr[i/2]>=temp) break;
arr[i] = arr[i/2];
i /= 2;
}
arr[i] = temp;
}
void FilterDown(int arr[],int i,int n){
int temp,j;
temp = arr[i];
j = i+i;
while(j<=n){
if(j<n&&arr[j]<arr[j+1]) j++;
if(temp>=arr[j]) break;
arr[i] = arr[j];
i = j;
j = i+i;
}
arr[i] = temp;
}
|