首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是归并排序算法?详述归并排序算法的原理?用C语言实现归并排序算法。内附完整代码。

大家好,我是贤弟!

一、什么是归并排序?

归并排序(Merge Sort)是一种分治思想的算法,其核心思想是将待排序数组不断划分为更小的子问题,并对子问题进行排序和合并,最终达到整个序列有序的目的。

二、归并排序的具体步骤

具体实现步骤如下:

1、将待排序数组从中间位置分为两个子序列,直到每个子序列仅剩一个元素为止。

2、对左、右子序列分别递归地进行排序,直到所有子序列均已有序。

3、将两个有序的子序列合并成一个有序的序列。

三、代码示例

C语言实现代码如下:

#include

void merge(int arr[], int left, int mid, int right) { int i = left; int j = mid + 1; int k = 0; int tmp[right - left + 1];

while (i if (arr[i] < arr[j]) { tmp[k] = arr[i]; k++; i++; } else { tmp[k] = arr[j]; k++; j++; } }

while (i tmp[k] = arr[i]; k++; i++; }

while (j tmp[k] = arr[j]; k++; j++; }

for (int l = 0; l < k; l++) { arr[left + l] = tmp[l]; }}

void mergeSort(int arr[], int left, int right) { if (left >= right) { return; }

int mid = (left + right) / 2;

mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right);

merge(arr, left, mid, right);}

int main() { int arr[] = {6, 5, 3, 1, 8, 7, 2, 4}; int n = sizeof(arr) / sizeof(int);

mergeSort(arr, 0, n - 1);

for (int i = 0; i < n; i++) { printf("%d ", arr[i]); }

return 0;}

输出结果:

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OqKnZeES6pvJJE5raOUYqYPQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券