Pagini recente » Cod sursa (job #2970190) | Cod sursa (job #939274) | Cod sursa (job #252780) | Cod sursa (job #3231674) | Cod sursa (job #2002773)
#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)
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 = 0;
if(2 * p <= n && vals[p] > vals[2 * p])
new_p = 2 * p;
if((2 * p + 1 <= n && vals[2 * p + 1] < vals[2 * p]) && vals[p] > vals[2 * p + 1])
new_p = 2 * p + 1;
if(new_p != 0){
swap(vals[p], vals[new_p]);
heap_jos(new_p);
}
}
int main(){
FILE *fin, *fout;
fin = fopen("algsort.in", "r");
fout = fopen("algsort.out", "w");
fscanf(fin, "%d", &n);
for(int i = 1;i <= n;i++)
fscanf(fin, "%d", &vals[i]);
sorted.push_back(0);
while(n > 0){
for(int i = 1;i <= n;i++){
heap_jos(i);
heap_sus(i);
}
swap(vals[1], vals[n]);
sorted.push_back(vals[n]);
n--;
}
for(int i = 1;i < int(sorted.size());i++)
fprintf(fout, "%d ", sorted[i]);
fprintf(fout, "\n");
return 0;
}