归并排序—C语言实现
发布人:shili8
发布时间:2024-11-08 11:18
阅读次数:0
**归并排序算法**
================归并排序是一种常见的排序算法,属于分治类算法。它通过递归地将数组分成两个子数组,然后分别对这两个子数组进行排序,最终合并两个有序子数组得到最终结果。
**C语言实现**
-------------
### 归并函数
c// 归并函数void merge(int arr[], int left, int mid, int right) {
// 创建临时数组,用于存储归并后的结果 int temp[right - left +1];
// 初始化临时数组的下标 int i = left;
int j = mid +1;
int k =0;
// 归并过程 while (i <= mid && j <= right) {
if (arr[i] < arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
// 处理剩余的元素 while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
// 将临时数组中的元素复制回原数组 for (int p =0; p < right - left +1; p++) {
arr[left + p] = temp[p];
}
}
### 归并排序函数
c// 归并排序函数void mergeSort(int arr[], int left, int right) {
// 如果子数组中只有一个元素,则认为它是有序的 if (left < right) {
// 找到中间下标 int mid = left + (right - left) /2;
// 递归地对左半部分和右半部分进行排序 mergeSort(arr, left, mid);
mergeSort(arr, mid +1, right);
// 归并两个有序子数组 merge(arr, left, mid, right);
}
}
### 主函数
c// 主函数int main() {
int arr[] = {5,2,8,3,1,6,4};
int n = sizeof(arr) / sizeof(arr[0]);
// 调用归并排序函数 mergeSort(arr,0, n -1);
// 输出有序数组 for (int i =0; i < n; i++) {
printf("%d ", arr[i]);
}
return0;
}
**注释**
--------
* 归并函数 `merge` 将两个有序子数组合并成一个有序数组。
* 归并排序函数 `mergeSort` 递归地将数组分成两个子数组,然后分别对这两个子数组进行排序,最终合并两个有序子数组得到最终结果。
* 主函数 `main` 调用归并排序函数,输出有序数组。
**示例**
--------
* 输入:`5283164`
* 输出:`1234568`
**时间复杂度**
--------------
* 归并排序的时间复杂度为 O(n log n),其中 n 是数组长度。
**空间复杂度**
------------* 归并排序的空间复杂度为 O(n),其中 n 是数组长度。

