Pagini recente » Cod sursa (job #1397973) | Cod sursa (job #2832389) | Cod sursa (job #1109737) | Cod sursa (job #165946) | Cod sursa (job #1009080)
#include <iostream>
#include <fstream>
#define N_MAX 800
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int numbers[N_MAX], N, temp[N_MAX];
void mergev(int left, int mid, int right)
{
int no, t;
t = left;
no = right - left + 1;
while ((left <= mid - 1) && (mid <= right))
{
if (numbers[left] <= numbers[mid])
temp[t++] = numbers[left++];
else
temp[t++] = numbers[mid++];
}
while (left <= mid - 1) //daca a mai ramas ceva in vreun subsir se adauga tot
temp[t++] = numbers[left++];
while (mid <= right)
temp[t++] = numbers[mid++];
for (int i = 0; i <= no; i++)
numbers[right] = temp[right--];
}
void msort(int left, int right)
{
int mid;
if (right > left)
{
mid = (right + left) / 2;
msort(left, mid);
msort(mid+1, right);
mergev(left, mid+1, right);
}
}
int main()
{
in >> N;
for(int i = 1; i <= N; i++)
in >> numbers[i];
msort(1, N);
for(int i = 1; i <= N; i++)
cout << numbers[i] << " ";
in.close();
out.close();
return 0;
}