Pagini recente » Cod sursa (job #228117) | Cod sursa (job #2791134) | Cod sursa (job #2896646) | Cod sursa (job #2625403) | Cod sursa (job #1599637)
#include <fstream>
using namespace std;
const int MAXN = 500003;
int N, v[MAXN];
void readInput() {
ifstream fin("algsort.in");
fin >> N;
for ( int i = 0; i < N; ++i )
fin >> v[i];
fin.close();
}
void mergeThem( int first, int mid, int last ) {
int i = first;
int j = mid + 1;
int k = 0;
int *aux = new int[last + 1 - first];
while ( i <= mid && j <= last ) {
if ( v[i] < v[j] )
aux[k++] = v[i++];
else
aux[k++] = v[j++];
}
while ( i <= mid )
aux[k++] = v[i++];
while ( j <= last )
aux[k++] = v[j++];
for ( int i = first; i <= last; ++i )
v[i] = aux[i-first];
delete[] aux;
}
void mergesort( int first, int last ) {
int mid = (first + last) >> 1;
if ( first < last ) {
mergesort( first, mid );
mergesort( mid+1, last );
mergeThem( first, mid, last );
}
}
void writeOutput() {
ofstream fout("algsort.out");
for ( int i = 0; i < N; ++i )
fout << v[i] << ' ';
fout.close();
}
int main() {
readInput();
mergesort( 0, N-1 );
writeOutput();
return 0;
}