Pagini recente » Cod sursa (job #2747158) | Cod sursa (job #1530737) | Cod sursa (job #2203624) | Cod sursa (job #1504449) | Cod sursa (job #3153064)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
int a[1000000];
int b[1000000];
void interclasare(int st, int dr)
{
int mid = (st + dr) / 2;
int i = st;
int j = mid + 1;
int k = st;
while (i <= mid && j <= dr)
{
if (a[i] < a[j])
{
b[k] = a[i];
k++;
i++;
}
else
{
b[k] = a[j];
k++;
j++;
}
}
while (i <= mid)
{
b[k] = a[i];
k++;
i++;
}
while (j <= dr)
{
b[k] = a[j];
k++;
j++;
}
for (int o = st; o < k; o++)
{
a[o] = b[o];
}
}
void merge_sort(int st, int dr)
{
if (st == dr)
{
return;
}
else
{
int mid = (st + dr) / 2;
merge_sort(st, mid);
merge_sort(mid + 1, dr);
interclasare(st, dr);
}
}
int divide(int st, int dr)
{
int piv = a[dr];
int j = st;
for (int i = st; i < dr; i++)
{
if (a[i] <= piv)
{
swap(a[j], a[i]);
j++;
}
}
swap(a[j], a[dr]);
return j;
}
void quick_sort(int st, int dr)
{
if (st >= dr)
{
return;
}
else
{
int piv = divide(st, dr);
quick_sort(st, piv - 1);
quick_sort(piv + 1, dr);
}
}
int main()
{
fin >> n;
for (int i = 0; i < n; i++)
{
fin >> a[i];
}
merge_sort(0, n - 1);
for (int i = 0; i < n; i++)
{
fout << a[i] << ' ';
}
}