Pagini recente » Cod sursa (job #631169) | Cod sursa (job #1104434) | Cod sursa (job #2551859) | Cod sursa (job #1041612) | Cod sursa (job #2898300)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
void merge(int array[], int left, int mid, int right)
{
int subArrayOne = mid - left + 1;
int subArrayTwo = right - mid;
int *leftArray = new int[subArrayOne],
*rightArray = new int[subArrayTwo];
for (int i = 0; i < subArrayOne; i++)
leftArray[i] = array[left + i];
for (int j = 0; j < subArrayTwo; j++)
rightArray[j] = array[mid + 1 + j];
int indexOfSubArrayOne = 0,
indexOfSubArrayTwo = 0;
int indexOfMergedArray = left;
while (indexOfSubArrayOne < subArrayOne && indexOfSubArrayTwo < subArrayTwo) {
if (leftArray[indexOfSubArrayOne] <= rightArray[indexOfSubArrayTwo]) {
array[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
indexOfSubArrayOne++;
}
else {
array[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
indexOfSubArrayTwo++;
}
indexOfMergedArray++;
}
while (indexOfSubArrayOne < subArrayOne) {
array[indexOfMergedArray] = leftArray[indexOfSubArrayOne];
indexOfSubArrayOne++;
indexOfMergedArray++;
}
while (indexOfSubArrayTwo < subArrayTwo) {
array[indexOfMergedArray] = rightArray[indexOfSubArrayTwo];
indexOfSubArrayTwo++;
indexOfMergedArray++;
}
}
void mergeSort(int array[], int begin, int end)
{
if (begin >= end)
return;
int mid = begin + (end - begin) / 2;
mergeSort(array, begin, mid);
mergeSort(array, mid + 1, end);
merge(array, begin, mid, end);
}
int main()
{
int arr[500000],n;
f>>n;
for(int i=0;i<n;i++)
f>>arr[i];
mergeSort(arr, 0, n - 1);
for(int i=0;i<n;i++)
g<<arr[i]<<" ";
return 0;
}