当前位置:实例文章 » 其他实例» [文章]归并排序—C语言实现

归并排序—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 是数组长度。

相关标签:算法数据结构
其他信息

其他资源

Top