Pagini recente » Cod sursa (job #576924) | Cod sursa (job #772516) | Cod sursa (job #286521) | Cod sursa (job #1026039) | Cod sursa (job #2923947)
#include <fstream>
const int nmax = 5 * 10e5;
int n, v[nmax];
void read()
{
std::ifstream fin("algsort.in");
fin >> n;
for (int i = 0;i < n;i++)
fin >> v[i];
fin.close();
}
void Merge(int lower, int mid, int upper)
{
int const x = mid - lower + 1, y = upper - mid;
int* a = new int[x];
int* b = new int[y];
for (int i = 0;i < mid - lower + 1;i++)
a[i] = v[lower + i];
for (int j = 0;j < upper - mid;j++)
b[j] = v[mid + j + 1];
int i = 0, j = 0;
while (i < mid - lower + 1 && j < upper - mid)
if (a[i] < b[j])
v[lower + i + j] = a[i++];
else
v[lower + i + j] = b[j++];
while (i < mid - lower + 1)
v[lower + i + j] = a[i++];
while (j < upper - mid)
v[lower + i + j] = b[j++];
delete[] a, b;
}
void MergeSort(int lower, int upper)
{
if (upper <= lower)
return;
int mid = (lower + upper) / 2;
MergeSort(lower, mid);
MergeSort(mid + 1, upper);
Merge(lower, mid, upper);
}
void print()
{
std::ofstream fout("algsort.out");
for (int i = 0;i < n;i++)
fout << v[i] << " ";
}
int main()
{
read();
MergeSort(0,n-1);
print();
return 0;
}