Pagini recente » Borderou de evaluare (job #1617246) | Borderou de evaluare (job #2013236) | clasament-arhiva-educationala | Profil arina.popianu | Cod sursa (job #1005017)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
void Merge( int* A, int left, int mid, int right ){
//int* L = new int[mid-left+1];
//int* R = new int[right-mid];
//for( int i = 0; i < mid-left+1; i++ )
// L[i] = A[left+i];
//for( int i = 0; i < right - mid; i++ )
// R[i] = A[mid+i+1];
int i = left;
int j = mid+1;
int k = left;
int b[500001];
while( (i <= mid) && (j <= right ) ){
if( A[i] < A[j] ){
b[k] = A[i];
k++;
i++;
}
else{
b[k] = A[j];
k++;
j++;
}
}
while( i <= mid ){
b[k] = A[i];
k++;
i++;
}
while( j <= right ){
b[k] = A[j];
k++;
j++;
}
for( int i = left; i <= right; i++ )
A[i] = b[i];
}
void MergeSort( int* A, int left, int right ){
if( left < right ){
int mid = left + ( (right-left)>>1 );
MergeSort( A, left, mid );
MergeSort( A, mid+1, right);
Merge( A, left, mid, right );
}
}
int main(){
int N;
int* A;
in >> N;
A = new int[N];
for( int i = 0; i < N; i++ )
in >> A[i];
MergeSort( A, 0, N-1);
for( int i = 0; i < N; i++ )
out << A[i]<<" ";
return 0;
}