c语言归并排序
时间: 2023-07-03 20:26:56 浏览: 114
归并排序是一种基于分治思想的排序算法,其基本思想是将待排序的序列划分成若干子序列,对每个子序列进行排序,最后将排好序的子序列合并成一个有序的序列。
以下是使用C语言实现归并排序的示例代码:
```c
#include <stdio.h>
// 合并两个有序数组
void merge(int arr[], int left, int mid, int right)
{
int tmp[right-left+1]; // 临时数组
int i = left, j = mid+1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
tmp[k++] = arr[i++];
} else {
tmp[k++] = arr[j++];
}
}
while (i <= mid) {
tmp[k++] = arr[i++];
}
while (j <= right) {
tmp[k++] = arr[j++];
}
for (int p = 0; p < k; p++) {
arr[left+p] = tmp[p];
}
}
// 归并排序
void merge_sort(int arr[], int left, int right)
{
if (left >= right) { // 递归结束条件
return;
}
int mid = (left + right) / 2;
merge_sort(arr, left, mid); // 左半部分归并排序
merge_sort(arr, mid+1, right); // 右半部分归并排序
merge(arr, left, mid, right); // 合并两个有序数组
}
int main()
{
int arr[] = {38, 27, 43, 3, 9, 82, 10};
int n = sizeof(arr) / sizeof(arr[0]);
merge_sort(arr, 0, n-1);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
在该示例代码中,`merge`函数用于合并两个有序数组,`merge_sort`函数用于归并排序,主函数中调用`merge_sort`函数对数组进行排序并输出排序结果。
阅读全文