归并排序算法优化用C语言代码写出来
时间: 2023-07-19 14:17:12 浏览: 41
下面是一个采用循环展开和原地排序的归并排序算法的C语言实现代码:
```c
#include <stdio.h>
#define MIN(x, y) ((x) < (y) ? (x) : (y))
void merge_sort(int arr[], int len) {
int i, j, k, l, m;
int *a = arr, *b = (int*) malloc(len * sizeof(int));
for (i = 1; i < len; i *= 2) {
for (j = 0; j < len - i; j += i*2) {
l = j;
m = MIN(j + i, len);
k = l;
while (l < m && m < j + i*2) {
if (a[l] <= a[m]) {
b[k++] = a[l++];
} else {
b[k++] = a[m++];
}
}
while (l < m) {
b[k++] = a[l++];
}
while (m < j + i*2) {
b[k++] = a[m++];
}
}
int *temp = a;
a = b;
b = temp;
}
if (a != arr) {
for (i = 0; i < len; i++) {
b[i] = a[i];
}
b = a;
}
free(b);
}
int main() {
int arr[] = { 38, 27, 43, 3, 9, 82, 10 };
int len = sizeof(arr) / sizeof(arr[0]);
merge_sort(arr, len);
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这个实现代码采用了循环展开和原地排序的方法,可以有效地减少了循环次数和空间开销,提高了归并排序算法的效率。