Pagini recente » Cod sursa (job #1340672) | Cod sursa (job #664360) | Cod sursa (job #2352072) | Rating Vladimir Antofi (vladimir520) | Cod sursa (job #1295521)
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[500005],n,i,j;
void inserare(int n) {
int c=n,p=c/2;
while(p>=1 && v[p]<v[c]){
swap(v[c],v[p]);
c=p;
p/=2;
}
}
void corecteaza(int n) {
int p = 1;
int c = 2*p;
while (c<=n) {
if (c + 1 <= n && v[c+1]>v[c])
c++;
if (v[p] < v[c]) {
swap(v[p], v[c]);
p = c;
c = 2*p;
} else
break;
}
}
int main(){
fin>>n;
for(i=1;i<=n;i++){
fin>>v[i];
inserare(i);//am heap cu i-1 elemente si inseresz un nou element cu valoarea v[i]
}
for(i=n;i>=2;i--) {
swap(v[1], v[i]);
corecteaza(i-1); // corecteaza heapul cu i-1 elemente stricat doar de radacina
}
for (i=1;i<=n;i++)
fout<<v[i]<<" ";
}