Pagini recente » Cod sursa (job #2852875) | Cod sursa (job #1826233) | Cod sursa (job #1668772) | Cod sursa (job #827739) | Cod sursa (job #2624715)
#include <bits/stdc++.h>
using namespace std;
// 1: numere aleatorii
// 2: numere aproape sortate
// 3: numere sortate invers
// 4: numere aleatorii dar multe perechi de numere identice
void merge(int arr[], int l, int m, int r)
{
int i,j,k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1],R[n2];
for(i=0;i<n1;i++)
L[i] = arr[l+i];
for(j=0;j<n2;j++)
R[j] = arr[m+1+j];
i = 0;
j = 0;
k = l;
while(i < n1 && j < n2)
{
if(L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else{
arr[k] = R[j];
j++;
}
k++;
}
while(i<n1)
{
arr[k] = L[i];
i++;
k++;
}
while(j<n2)
{
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r)
{
if(l<r)
{
int m = l+(r-l)/2; // overflow on (l+r)/2 big numbers
mergeSort(arr,l,m);
mergeSort(arr,m+1,r);
merge(arr,l,m,r);
}
}
int N;
ifstream f("algsort.in");
ofstream g("algsort.out");
int main()
{
f >> N;
int myvect[N];
for(int i=0;i<N;i++)
f >> myvect[i];
mergeSort(myvect,0,N-1);
for(int i=0;i<N;i++)
g << myvect[i] << " ";
}