当前位置: 首页 > news >正文

【数据结构】——排序篇(下)

前言:前面我们的排序已经详细的讲解了一系列的方法,那么我们现在久之后一个归并排序了,所以我们现在就来讲解一下归并排序。

在这里插入图片描述

归并排序:

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and
Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有
序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
在这里插入图片描述

void _MergeSort(int* a, int begin, int end, int* tmp)
{if (begin >= end)return;int mid = (begin + end) / 2;// [begin, mid][mid+1, end]_MergeSort(a, begin, mid, tmp);_MergeSort(a, mid + 1, end, tmp);// [begin, mid][mid+1, end]归并int begin1 = begin, end1 = mid;int begin2 = mid + 1, end2 = end;int i = begin;while (begin1 <= end1 && begin2 <= end2){if (a[begin1] < a[begin2]){tmp[i++] = a[begin1++];}else{tmp[i++] = a[begin2++];}}while (begin1 <= end1){tmp[i++] = a[begin1++];}while (begin2 <= end2){tmp[i++] = a[begin2++];}memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1));
}

a是我们待排序的数组,里面存放了要排序的数据,tmp是我们额外开辟的数组用来存放我们排好序的数据,而我们排好序的数据则是像链表一样尾插入数组的。我们先找出中间值,给这个区间分成两个小区间,两个小区间各自在分成小区间。从左到右逐一比较两个小区间中的元素,把较小的元素优先放入额外开辟的数组tmp,如果一个小区间的全部尾插到tmp中就结束了循环,而另外一个数组则按顺序的尾插到tmp中。最后我们的tmp中的数据拷贝到数组a中就完成了。
在这里插入图片描述

void MergeSort(int* a, int n)
{int* tmp = (int*)malloc(sizeof(int) * n);if (tmp == NULL){perror("malloc fail");return;}_MergeSort(a, 0, n - 1, tmp);free(tmp);
}

这里就是用来开辟额外数组tmp的,我们传参到函数_MergeSort,在_MergeSort中递归完成排序之后就返回,再将开辟的空间销毁。

如果最大家有所帮助的话就支持一下吧!感谢大家!

http://www.lryc.cn/news/257235.html

相关文章:

  • C++ 模拟实现vector
  • 基于hadoop下的spark安装
  • 面试经典150题(10-13)
  • Sql server数据库数据查询
  • 前端开发tips
  • 实现跨VLAN通信、以及RIP路由协议的配置
  • 使用python绘制现有彩票记录走势图
  • Kubernetes实战(十)-升级k8s集群
  • 点击el-tree小三角后去除点击后的高亮背景样式,el-tree样式修改
  • 【电子取证篇】汽车取证数据提取与汽车取证实例浅析(附标准下载)
  • 系列学习前端之第 3 章:一文精通 css
  • 基于JavaWeb+SSM+Vue马拉松报名系统微信小程序的设计和实现
  • leetcode 255.用队列实现栈
  • 排序算法---选择排序
  • 物联网IC
  • 2022年第十一届数学建模国际赛小美赛A题翼龙如何飞行解题全过程文档及程序
  • Blender学习--制作带骨骼动画的机器人
  • 单片机学习13——串口通信
  • Unity 实现单例模式
  • 【Android12】Android Framework系列--AMS启动Activity分析
  • Hive的几种排序方式、区别,使用场景
  • 设计模式-外观模式
  • Kubernetes实战(九)-kubeadm安装k8s集群
  • 【HarmonyOS开发】拖拽动画的实现
  • 提高问卷填写率的策略与方法
  • 软件工程考试复习
  • PHP基础 - 类型比较
  • 张正友相机标定法原理与实现
  • 【LeetCode】2723. 两个 Promise 对象相加
  • 设计模式--命令模式的简单例子