Pagini recente » Cod sursa (job #2722898) | Cod sursa (job #2711065) | Cod sursa (job #1086859) | Cod sursa (job #377180) | Cod sursa (job #2063943)
#include <iostream>
#include <fstream>
using namespace std;
ifstream is("algsort.in");
ofstream os("algsort.out");
void merge(int arr[], int left, int middle, int right)
{
int len1 = middle - left +1;
int len2 = right - middle;
int L[len1];
int R[len2];
for (int i = 0; i < len1; i++)
{
L[i] = arr[left+i];
}
for (int j = 0; j < len2; j++)
{
R[j] = arr[middle+1+j];
}
int i = 0, j = 0;
int k = left;
while( i < len1 && j < len2)
{
if(L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
while(i < len1)
{
arr[k] = L[i]; i++; k++;
}
while(j < len2)
{
arr[k] = R[j]; j++; k++;
}
}
void mergeSort(int arr[], int left, int right)
{
if(left >= right)
return;
int middle = left + (right-left)/2;
mergeSort(arr, left, middle);
mergeSort(arr, middle+1, right);
merge(arr, left, middle, right);
}
int arr[500001];
int main()
{
int n;
is >> n;
for (int i = 0; i < n; i++)
is >> arr[i];
mergeSort(arr, 0, n-1);
for(int i = 0; i < n; ++i)
os << arr[i] << " ";
is.close();
os.close();
return 0;
}