#include <stdio.h>
#define MAXSIZE 8
void merge(int arr[], 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 arr[], int start, int end) {
if (start < end) {
int mid = (start + end) / 2;
sort(arr, start, mid);
sort(arr, mid + 1, end);
merge(arr, start, mid, end);
}
}
int main() {
int arr[MAXSIZE] = { 8, 1, 7, 2, 6, 3, 5, 4 };
sort(arr, 0, MAXSIZE - 1);
int i;
for (i = 0; i < MAXSIZE; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
2-路归并排序算法
最新推荐文章于 2022-11-12 22:37:51 发布