Pagini recente » Cod sursa (job #1233155) | Cod sursa (job #2268192) | Cod sursa (job #2488209) | Cod sursa (job #1383106) | Cod sursa (job #801821)
Cod sursa(job #801821)
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <cstring>
using namespace std;
void Merge(int a[], int p, int q, int r){ //a[p..q], a[q+1..r]
int n1 = q - p + 1;
int n2 = r - q;
int *L = new int[n1];
int *R = new int[n2];
memcpy(L, a + p, n1 * sizeof(int));
memcpy(R, a + q + 1, n2 * sizeof(int));
int i = 0, j = 0, k = p;
while(i < n1 && j < n2){
if(L[i] <= R[j])
a[k++] = L[i++];
else
a[k++] = R[j++];
}
while(i < n1)
a[k++] = L[i++];
}
void MergeSort(int a[], int p, int r){
if(p < r){
int q = (p + r) / 2;
MergeSort(a, p, q);
MergeSort(a, q + 1, r);
Merge(a, p, q, r);
}
}
int main(){
int N, *a;
ifstream f("algsort.in");
ofstream g("algsort.out");
f >> N;
a = new int[N];
for(int i = 0; i < N; ++i)
f >> a[i];
MergeSort(a, 0, N-1);
for(int i = 0; i < N; ++i)
g << a[i] << " ";
f.close();
g.close();
return 0;
}