Pagini recente » Cod sursa (job #1134096) | Cod sursa (job #2853895) | Cod sursa (job #3177829) | Cod sursa (job #3125632) | Cod sursa (job #2272765)
#include <stdio.h>
using namespace std;
void sortare_interclasare(int *v, int *a, int *b, int n) {
int i = 0, j = 0, mid = n / 2;
for (int k = 0; k < n; k++) {
if (i == mid) {
v[k] = b[j];
j++;
continue;
}
if (j == mid + n % 2) {
v[k] = a[i];
i++;
continue;
}
if (a[i] > b[j]) {
v[k] = b[j];
j++;
}
else {
v[k] = a[i];
i++;
}
}
}
void merge_sort(int *v, int n) {
if (n > 1) {
int mid = n / 2, k = 0;
int a[mid + 1], b[mid + 1];
for (int i = 0; i < mid; i++)
a[i] = v[i];
for (int i = mid; i < n; i++)
b[k++] = v[i];
merge_sort(a, mid);
merge_sort(b, mid + n % 2);
sortare_interclasare(v, a, b, n);
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n, numar;
scanf("%d", &n);
int numere[n];
for (int i = 0; i < n; i++) {
scanf("%d", &numar);
numere[i] = numar;
}
merge_sort(numere, n);
for (int i = 0; i < n; i++)
printf("%d ", numere[i]);
return 0;
}