【数据结构】—超级详细的归并排序(含C语言实现)
食用指南:本文在有C基础的情况下食用更佳
🔥这就不得不推荐此专栏了:C语言
♈️今日夜电波:斜陽—ヨルシカ
0:30━━━━━━️💟──────── 3:20
🔄 ◀️ ⏸ ▶️ ☰
💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍
目录
♉️一、前置知识—什么是归并排序
♊️二、归并排序
归并排序的思想
归并排序的递归实现
♒️归并排序的非递归实现(难点)
♋️三、归并排序的特性总结
♉️一、前置知识—什么是归并排序
归并排序是一种基于分治思想的排序算法。它将待排序的数组分成两个子数组,对每个子数组进行排序,最后将子数组合并成一个有序的数组。具体来说,归并排序采用递归的方式将数组不断二分,直到每个子数组只有一个元素,然后再将相邻的两个子数组归并成一个有序的数组,然后不断合并,直到最终得到原数组的有序排列,当然你也可以采用非递归的方法,总体的思路都是一样的。与快速排序不同的是,归并排序在每轮排序中都会将数组完全拆分成两个子数组。
♊️二、归并排序
归并排序的思想
归并排序是基于分治思想的一种排序算法,它可以将一个大问题分解成若干个小问题,再通过合并小问题的解来得到大问题的解。
具体来说,归并排序的思想如下:
- 将待排序的数组划分为两个子数组,对每个子数组进行递归排序;
- 将排好序的子数组合并成一个有序的数组。
这一过程可以不断重复,直到将整个数组划分为单个元素的子数组,然后再将其合并成一个有序数组,排序完成。
一图理解~
动图了解~
归并排序的递归实现
归并排序的递归实现步骤如下:
- 如果数组长度为1,直接返回该数组;
- 将数组按中间位置划分成两个子数组,分别对这两个子数组进行递归排序,得到排好序的两个子数组;
- 将排好序的两个子数组合并成一个有序数组,具体方法为创建一个辅助数组,同时遍历两个子数组,比较两个子数组中当前位置的元素,将较小的元素放入辅助数组中;
- 将辅助数组中的元素复制回原数组中。
代码实现:
void _Mergesort(int* a, int* temp,int begin, int end) { if (end
还没有评论,来说两句吧...