Pagini recente » Istoria paginii runda/probleme_sarbatori/clasament | Diferente pentru preoni-2006/runda-4/solutii intre reviziile 7 si 6 | Monitorul de evaluare | Istoria paginii runda/ada12/clasament | Cod sursa (job #2649968)
#include <fstream>
using namespace std;
int numbers[500001];
void mergesort(int start, int stop) {
if (start >= stop)
return;
int aux;
if (start == stop - 1) {
if (numbers[start] > numbers[stop]) {
aux = numbers[start];
numbers[start] = numbers[stop];
numbers[stop] = aux;
}
return;
}
int l = start+1, r=stop;
while(l < r) {
while(l < r && numbers[l] < numbers[start])
++l;
while(l < r && numbers[r] >= numbers[start])
--r;
aux = numbers[r];
numbers[r] = numbers[l];
numbers[l] = aux;
}
aux = numbers[start];
numbers[start] = numbers[r];
numbers[r] = aux;
mergesort(start, l-1);
mergesort(r+1, stop);
}
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
fin >> n;
for (int i=0; i<n; ++i)
fin >> numbers[i];
mergesort(0, n-1);
for(int i=0; i<n; ++i)
fout << numbers[i] << ' ';
return 0;
}