题解 | 排序
排序
https://www.nowcoder.com/practice/508f66c6c93d4191ab25151066cb50ef
#include <stdio.h>
#define dataLen 100
int merge(int* data, int start, int mid, int end, int n) {
int result[100];
int k = 0;
int i = start;
int j = mid + 1;
// 升序排序
while (i <= mid && j <= end) {
if (data[i] > data[j]) {
result[k++] = data[j++];
} else {
result[k++] = data[i++];
}
}
// 处理剩余的部分
if (i == mid + 1) {
while (j <= end) {
result[k++] = data[j++];
}
}
if (j == end + 1) {
while (i <= mid) {
result[k++] = data[i++];
}
}
// 将这些元素复制回原数组arr的start到end位置,完成合并过程
for (j=0, i=start; j<k; i++, j++) {
data[i] = result[j];
}
return 0;
}
int mergeSort(int* data, int start, int end, int n) {
if (start >= end)
return 0;
int mid = (start + end) / 2;
// 分
mergeSort(data, start, mid, n);
mergeSort(data, mid+1, end, n);
// 合并
merge(data, start, mid, end, n);
return 0;
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
int data[dataLen];
for (int i = 0; i < n; i++) {
scanf("%d", &data[i]);
}
// 归并排序
mergeSort(data, 0, n - 1, n);
// 输出结果
for (int i = 0; i < n; i++) {
printf("%d ", data[i]);
}
}
return 0;
}


