Pagini recente » Cod sursa (job #846405) | Cod sursa (job #26435) | Cod sursa (job #2412034) | Cod sursa (job #3139829) | Cod sursa (job #1246727)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[500010], n, i, c, p;
void swap(int &a, int &b) {
int aux = a;
a = b;
b = aux;
}
int main() {
fin>>n>>v[1];
for (i=2;i<=n;i++) {
fin>>v[i];
// introduc pe v[i] in heapul deja corect cu primele i-1 elemente
c=i; p = i/2;
while (p>=1) {
if (v[c] > v[p])
swap(v[c], v[p]);
else
break;
c = p;
p = c/2;
}
}
for (i=n;i>=2;i--) {
swap(v[1], v[i]);
// corectez heapul cu i-1 elemente stricat de v[1]
p = 1;
c = 2;
while (c <= i-1) {
if (c + 1 <= i-1 && v[c+1] > v[c])
c++;
if (v[p] < v[c])
swap(v[c], v[p]);
else
break;
p = c;
c = 2*p;
}
}
for (i=1;i<=n;i++)
fout<<v[i]<<" ";
}