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

数据结构6.4——归并排序

基本思想:

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为,称为二路归并。

核心思想:

将两个已经排好序的数组,合成一个排好序的数组

如果:一个数组只有一个元素,那么这个数组一定是有序的

问题:

  1. 我们该如何把一个乱序的数组,分为全是只有一个元素的数组?(答案:递归)
  2. 我们又该如何把多个只有一个元素的数组合并成一个有序的数组?

代码演示:

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);
}void _MergeSort(int* a, int begin, int end, int* tmp)
{if(begin>=end)//当只有一个元素排序时候就停止了,毕竟数组只有一个元素就相当于排好序了return;int mid = (begin + end) / 2;_MergeSort(a, begin, mid, tmp);//递归的目的是把数组打散_MergeSort(a, mid+1, end, tmp);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));
}

归并排序的特性总结:

  1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思想更多的是解决再磁盘中的外排序问题
  2. 时间复杂度:O(NlogN)
  3. 空间复杂度:O(N)
  4. 稳定性:稳定
http://www.lryc.cn/news/503076.html

相关文章:

  • 【html 常用MIME类型列表】
  • Linux之vim编辑器
  • 【工具介绍】可以批量查看LableMe标注的图像文件信息~
  • 2024年山西省第十八届职业院校技能大赛 (高职组)“信息安全管理与评估”赛项规程
  • STM32完全学习——STemWin的移植小插曲
  • Java——IO流(下)
  • avue-crud 同时使用 column 与 group 的问题
  • 深入解析 Pytest 中的 conftest.py:测试配置与复用的利器
  • JAVA |日常开发中Websocket详解
  • Typora教程
  • 泛微E9常见API保姆级详解!!!!
  • UniApp配置使用原子化tailwindcss
  • 02. Docker:安装和操作
  • 【MySQL中多表查询和函数】
  • 加速科技精彩亮相ICCAD 2024
  • 免费下载 | 2024算网融合技术与产业白皮书
  • Ubuntu系统下部署大语言模型:Ollama和OpenWebUI实现各大模型的人工智能自由
  • 基于Mybatis,MybatisPlus实现数据库查询分页功能
  • 【razor】echo搭配relay功能分析
  • 技术文档的定义和规范,以及技术文档模板参考
  • 基于windows环境使用nvm安装多版本nodejs
  • 力扣9. 回文数
  • C#—BitArray点阵列
  • 国产自主可控新征程:华为原生鸿蒙系统与鲲鹏认证
  • esxi8 虚拟机使用ubuntu22模板后 没有ip配置文件,只有ipv6链接正常使用
  • 【Qualcomm】IPQ5018查看连接终端RSSI、SNR、NF方法
  • 【构建工具】现代开发的重要角色
  • 【Linux系统】—— 初识 shell 与 Linux 中的用户
  • 二维码数据集,使用yolov,voc,coco标注,3044张各种二维码原始图片(未图像增强)
  • Vue指令