Pagini recente » Cod sursa (job #1864410) | Cod sursa (job #1561322) | Cod sursa (job #2420321) | Cod sursa (job #1480576) | Cod sursa (job #1391309)
#include <fstream>
#include <iostream>
void merge (int* a, int left, int mid, int right);
void merge_sort (int* a, int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
merge_sort (a, left, mid);
merge_sort (a, mid + 1, right);
merge (a, left, mid, right);
}
}
void merge (int* a, int left, int mid, int right) {
int i, j, k;
int dim_l = mid - left + 1, dim_r = right - mid;
int l[dim_l], r[dim_r];
for (i = 0; i < dim_l; ++i) {
l[i] = a[left+i];
}
for (i = 0; i < dim_r; ++i) {
r[i] = a[mid+1+i];
}
i = 0; j = 0; k = left;
while (i < dim_l && j < dim_r) {
if (l[i] < r[j]) {
a[k++] = l[i++];
} else {
a[k++] = r[j++];
}
}
while (i < dim_l) {
a[k++] = l[i++];
}
while (j < dim_r) {
a[k++] = r[j++];
}
}
int main() {
std::ifstream in;
std::ofstream out;
int n;
int* array;
in.open ("algsort.in");
out.open ("algsort.out");
in >> n;
array = new int[n];
for (int i = 0; i < n; ++i) {
in >> array[i];
}
merge_sort (array, 0, n - 1);
for (int i = 0; i < n; ++i) {
out << array[i] << " ";
}
in.close();
out.close();
}