visualgo算法可视化——归并排序算法 这一篇动画演示就够了

这篇博客详细介绍了归并排序算法,包括其基本思想、重要的O(n)归并子程序、C++实现方法、分治算法原理及归并排序作为分治应用的实例。通过动图展示和分步骤分析,揭示了归并排序的O(n log n)时间复杂度及其稳定性和存储需求。
摘要由CSDN通过智能技术生成

归并排序算法

基本想法

给定一个N个项目的数组,归并排序将:
1.将每对单个元素(默认情况下,已排序)归并为2个元素的有序数组,
2.将2个元素的每对有序数组归并成4个元素的有序数组,重复这个过程…,
3.最后一步:归并2个N / 2元素的排序数组(为了简化讨论,我们假设N是偶数)以获得完全排序的N个元素数组。
这只是一般的想法,在我们可以讨论归并排序的真正形式之前,我们需要更多的细节。

重要的子程序 O(n)归并

我们首先讨论归并排序算法的最重要的子程序:O( N )归并,然后解析这个归并排序算法。
给定两个大小为 N1 和 N2 的排序数组 A 和 B,我们可以在O( N ) 时间内将它们有效地归并成一个大小为 N = N1 + N2的组合排序数组。
这是通过简单地比较两个阵列的前面并始终取两个中较小的一个来实现的。 但是,这个简单但快速的O( N )合并子例程将需要额外的数组来正确地进行合并。
参见以下动图:
归并

归并于C++的实现方法

void merge(int a[], int low, int mid, int high) {
   
  // subarray1 = a[low..mid], subarray2 = a[mid+1..high], both sorted
  int N = high-low+1;
  int b[N]; // 讨论: 为什么我们需要一个临时的数组 b?
  int left = low, right 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值