Pagini recente » Cod sursa (job #927218) | Cod sursa (job #3001958) | Cod sursa (job #2390619) | Cod sursa (job #3139783) | Cod sursa (job #2663632)
#include <iostream>
#include <fstream>
const int NMAX = 5e5;
int n;
int a[1 + NMAX];
//int qsort_part(int left, int right) {
// int pivot_ind = left;
// int pivot_val = a[right];
// for (int i = left; i < right; ++i) {
// if (a[i] < pivot_val) {
// std::swap(a[pivot_ind], a[i]);
// ++ pivot_ind;
// }
// }
// std::swap(a[pivot_ind], a[right]);
// return pivot_ind;
//}
//
//void quicksort(int left, int right) {
// if (left >= right)
// return;
// int index = qsort_part(left, right);
// quicksort(left, index - 1);
// quicksort(index + 1, right);
//}
void merge(int left, int right, int r) {
int n1 = right - left + 1;
int n2 = r - right;
int left_arr[n1], right_arr[n2];
for(int i = 0; i < n1; i++)
left_arr[i] = a[left + i];
for(int j = 0; j < n2; j++)
right_arr[j] = a[right + 1 + j];
int i = 0;
int j = 0;
int ind = left;
while (i < n1 && j < n2) {
if (left_arr[i] <= right_arr[j])
a[ind++] = left_arr[i++];
else
a[ind++] = right_arr[j++];
}
while (i < n1)
a[ind++] = left_arr[i++];
while (j < n2)
a[ind++] = right_arr[j++];
}
void mergesort(int left, int right) {
if (left < right) {
int m = left + (right - left) / 2;
mergesort(left, m);
mergesort(m + 1, right);
merge(left, m, right);
}
}
int main() {
std::ifstream in("algsort.in");
std::ofstream out("algsort.out");
in >> n;
for (int i = 1; i <= n; ++i)
in >> a[i];
in.close();
mergesort(1, n);
for (int i = 1; i <= n; ++i)
out << a[i] << ' ';
out.close();
return 0;
}