Pagini recente » Cod sursa (job #849730) | Cod sursa (job #925135) | Cod sursa (job #58036) | Cod sursa (job #1862072) | Cod sursa (job #856153)
Cod sursa(job #856153)
#include<iostream>
#include<fstream>
using namespace std;
void swap(int a[],int i,int l){
int x=a[i];
a[i]=a[l];
a[l]=x;
}
void makeHeap(int a[],int i,int n){
int max=i,x;
x=i<<1;
if(x<=n && a[max]<a[x])
max=x;
x+=1;
if(x<=n && a[max]<a[x])
max=x;
if(max!=i){
swap(a,i,max);
makeHeap(a,max,n);
}
}
void buildHeap(int a[],int &n){
for(int i=n/2;i>0;--i)
makeHeap(a,i,n);
}
void heapSort(int a[],int &n){
buildHeap(a,n);
int l=n;
while(l>1){
swap(a,1,l);
makeHeap(a,1,--l);
}
}
int main(){
int a[500001],n;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
fin>>n;
for(int i=1;i<=n;++i)
fin>>a[i];
fin.close();
heapSort(a,n);
for(int i=1;i<=n;++i)
fout<<a[i]<<' ';
return 0;
}