Pagini recente » Cod sursa (job #2262836) | Cod sursa (job #684214) | Cod sursa (job #3283459) | Cod sursa (job #875845) | Cod sursa (job #1221368)
#include <iostream>
#include <fstream>
#define MAX_LENGTH 500000
using namespace std;
int str[MAX_LENGTH];
long n;
void merge(int a[MAX_LENGTH], long n, int b[MAX_LENGTH], long m, int result[MAX_LENGTH], long &length)
{
long i = 0, j = 0, k;
length = m + n;
for(k = 0 ; (i < n) && (j < m) ; k++)
if(a[i] < b[j])
{
result[k] = a[i];
i++;
}
else
{
result[k] = b[j];
j++;
}
while(i < n)
{
result[k] = a[i];
i++;
k++;
}
while(j < m)
{
result[k] = b[j];
j++;
k++;
}
}
void merge_sort(int strng[MAX_LENGTH], long n)
{
long i;
int *a, *b;
if( n != 1)
{
a = new int[(n+1)/2];
b = new int[n/2];
for(i = 0 ; i < (n+1)/2 ; i++)
a[i] = strng[i];
for(i = 0 ; i < n/2 ; i++)
b[i] = strng[i + (n+1)/2];
merge_sort(a, (n+1)/2);
merge_sort(b, n/2);
merge(a, (n+1)/2, b, n/2, strng, n);
delete a;
delete b;
}
}
int main()
{
long i;
fstream f("algsort.in", ios::in);
fstream g("algsort.out", ios::out);
f >> n;
for(i = 0 ; i < n ; i++)
f >> str[i];
merge_sort(str, n);
for(i = 0 ; i < n ; i++)
g << str[i] << " ";
return 0;
}