Pagini recente » Cod sursa (job #446856) | Cod sursa (job #1279374) | Cod sursa (job #448091) | Cod sursa (job #3240345) | Cod sursa (job #2002904)
#include <cstdio>
#include <vector>
#include <utility>
using namespace std;
int vals[500001];
vector<int> sorted;
int n;
void heap_sus(int p){
if(p == 1 || p > n)
return;
if(vals[p] < vals[p / 2]){
swap(vals[p], vals[p / 2]);
heap_sus(p / 2);
}
}
void heap_jos(int p){
int new_p = p;
if(2 * p <= n && vals[p] > vals[2 * p])
new_p = 2 * p;
if(2 * p + 1 <= n && vals[2 * p + 1] < vals[new_p])
new_p = 2 * p + 1;
if(new_p != p){
swap(vals[p], vals[new_p]);
heap_jos(new_p);
}
}
void sortpart(int v[]){
while(n > 0){
swap(v[1], v[n]);
sorted.push_back(v[n]);
n--;
heap_jos(1);
}
}
int main(){
FILE *fin, *fout;
fin = fopen("algsort.in", "r");
fout = fopen("algsort.out", "w");
fscanf(fin, "%d", &n);
sorted.push_back(0);
for(int i = 1;i <= n;i++){
fscanf(fin, "%d", &vals[i]);
heap_sus(i);
}
sortpart(vals);
for(int i = 1;i < int(sorted.size());i++)
fprintf(fout, "%d ", sorted[i]);
fprintf(fout, "\n");
return 0;
}