Pagini recente » Cod sursa (job #3003756) | Cod sursa (job #1088914) | Cod sursa (job #1318097) | Cod sursa (job #2785757) | Cod sursa (job #3227068)
#include <iostream>
#include <fstream>
#define limit 500000
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
void merge(unsigned int* A, int l, int m, int r){
unsigned int* left = (unsigned int*)malloc((m - l + 1)*sizeof(unsigned int));
unsigned int* right = (unsigned int*)malloc((r - m)*sizeof(unsigned int));
for(int i = 0 ; i < m - l + 1; i++)
left[i] = A[l + i];
for(int i = 0; i < r - m; i++)
right[i] = A[m + 1 + i];
int i = 0;
int j = 0;
int index = l;
while(i < m-l+1 && j < r-m){
if(left[i] <= right[j]){
A[index] = left[i];
i++;
index++;
}
else{
A[index] = right[j];
j++;
index++;
}
}
while(i < m-l+1){
A[index] = left[i];
i++;
index++;
}
while(j < r-m){
A[index] = right[j];
j++;
index++;
}
delete[] left;
delete[] right;
}
void mergesort(unsigned int* A, int l, int r){
if(l < r){
int m = (l + r) / 2;
mergesort(A, l, m);
mergesort(A, m+1, r);
merge(A, l, m, r);
}
}
int main(){
unsigned int A[limit];
int N;
fin >> N;
for(int i = 0; i<N; i++)
fin >> A[i];
mergesort(A, 0, N-1);
for(int i = 0; i<N; i++)
fout << A[i] << " ";
}