69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define MAXSIZE 8
int arr[MAXSIZE] = { 5, 7, 2, 1, 9, 4, 3, 8 };
void merger(int start, int mid, int end) {
int len1 = mid - start + 1;
int len2 = end - mid;
int left[len1];
int right[len2];
int i, j, k;
// 相邻子序列赋值
for (i = 0; i < len1; i++)
left[i] = arr[start + i];
for (j = 0; j < len2; j++)
right[j] = arr[mid + 1 + j];
// 合并相邻两个有序子序列
i = j = 0;
k = start;
while (i < len1 && j < len2)
if (left[i] < right[j])
arr[k++] = left[i++];
else
arr[k++] = right[j++];
// 检查是否合并完毕
while (i < len1)
arr[k++] = left[i++];
while (j < len2)
arr[k++] = right[j++];
}
void sort(int start, int end) {
int mid;
if (start < end) {
mid = (start + end) / 2;
sort(start, mid);
sort(mid + 1, end);
merge(start, mid, end);
}
}
int main(int argc, char**argv) {
sort(0, MAXSIZE - 1);
int index = 0;
for (index = 0; index < MAXSIZE; index++)
printf("%d ", arr[index]);
return 0;
}