Pagini recente » Cod sursa (job #2731216) | Cod sursa (job #793305) | Cod sursa (job #2426206) | Cod sursa (job #3159100) | Cod sursa (job #3000165)
// // O(nlogn)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
void merge(int arr[], int left, int mid, int right)
{
int n1 = mid - left + 1;
int n2 = right - mid;
int arr1[n1], arr2[n2];
for (int i = 0; i < n1; i++)
arr1[i] = arr[left + i];
for (int j = 0; j < n2; j++)
arr2[j] = arr[mid + 1 + j];
int index1 = 0, index2 = 0;
int index3 = left;
while (index1 < n1 && index2 < n2) {
if (arr1[index1] <= arr2[index2])
arr[index3] = arr1[index1++];
else
arr[index3] = arr2[index2++];
index3++;
}
while (index1 < n1) {
arr[index3] = arr1[index1++];
index3++;
}
while (index2 < n2) {
arr[index3] = arr2[index2++];
index3++;
}
}
void mergeSort(int arr[], int left, int right){
if (left >= right)
return;
int mid = left + (right - left) / 2;
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
// Driver code
int main(){
int n;
f>>n;
int v[n];
for(int i=0; i<n; ++i)
f>>v[i];
f.close();
mergeSort(v,0,n-1);
for(int i=0; i<n; ++i)
g<<v[i]<<" ";
g.close();
return 0;
}