Pagini recente » Cod sursa (job #766489) | Cod sursa (job #2509626) | Cod sursa (job #1251924) | Cod sursa (job #2745817) | Cod sursa (job #1841296)
//mergesort
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 500000
void merge(int v[], int st, int dr, int aux[]) {
if (st == dr) {
return;
}
int mid = (st + dr) / 2;
int i = st, j = mid + 1, k = st;
merge(v, st, mid, aux);
merge(v, mid + 1, dr, aux);
while (i <= mid && j <= dr) {
if (v[i] <= v[j]) {
aux[k++] = v[i++];
} else {
aux[k++] = v[j++];
}
}
while (i <= mid) {
aux[k++] = v[i++];
}
while (j <= dr) {
aux[k++] = v[j++];
}
for (int i = st; i <= dr; i++) {
v[i] = aux[i];
}
}
int main()
{
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N, v[MAX], aux[MAX];
fin >> N;
for (int i = 0; i < N; i++) {
fin >> v[i];
}
merge(v, 0, N - 1, aux);
for (int i = 0; i < N; i++) {
fout << v[i] << " ";
}
fin.close();
fout.close();
return 0;
}