二分归并排序_【图文并茂】408数据结构中的排序算法讲解

排序是数据结构中的重要知识点,也是考研中的必考内容,一般会在选择题第11题考察,最常见的题目类型是给出一串记录和经过若干趟排序之后的记录,判断可能属于哪种排序算法。只要能够深入理解课本中常见排序算法的工作原理,知道每种算法的排序特点(不需要手写代码),这类题目就能很容易做出。

【排序算法的分类】

2a9ddf32c2cacb9dd51498ea0e7ffc0a.png

内部排序:排序在内存完成;

外部排序:待排记录数据量过大,内存无法容纳全部数据,需要借助外存;

稳定性:相等的元素,若经过排序,这些元素的相对次序保持不变,则排序算法是稳定的,否则是不稳定的。

(1)【插入排序】-->【直接插入排序】

93d0796f64f29778e3d326039c278b77.gif

直接插入排序核心思想:逐个处理待排序的记录,每条新记录与前面已排序的子序列进行比较,将它插入到子序列的正确位置。插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。

(2)【插入排序】-->【折半插入排序】

折半插入排序是对直接插入排序算法的改进,主要区别是在插入到已排序的序列时采用折半查找(二分查找),很明显相比直接插入排序减少了元素比较次数。

e1d08a3ba6276e30e83d553d410472a2.png

(3)【插入排序】-->【希尔排序】

希尔排序也是对直接插入排序的改进,它是把序列按一定间隔分组,对每组使用直接插入排序;随着间隔减小,一直到1,使得整个序列有序。如图d表示间隔,也叫做增量,相同颜色是一组,当d=1时,序列有序。(希尔排序在考试中的出现频率还挺高的)。

e040062db74101003fb9f9020a12be99.png

(4)【交换排序】-->【冒泡排序】

冒泡排序的实现原理:两两比较相邻的记录值,如果反序则交换,直到没有反序记录为止,冒泡排序每趟可以确定最大元素位置。 a9af2e70bc59ae27617a5a6aa127579b.gif

(5)【交换排序】-->【快速排序】

快速排序是应用最多的排序算法,因快速二字闻名。快速排序和归并排序一样,都是采用分治思想,其基本思想:在待排序表L[1...n]中任取一个元素 pivot作为基准,通过一趟排序将待排序表划分为两独立的部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中所有元素小于pivot, L[k+1...n]中所有元素大于或等于pivot,则pivot放在了其最终位置L(k)上,这个过程称作一趟快速排序,而后分别递归地对两个子表重复上述过程,直至每部分内只有一个元素或空为止,即所有元素放在了其最终位置上。

下图为一次快排过程,随机选择一个元素key作为基准,设置低位指针lo高位指针hi

b13e218a786588c3fd880d80a958d6dd.gif
(6)【 选择排序】-->【简单选择排序】

简单选择排序的基本思想:比较+交换。

1.从待排序序列中,找到关键字最小的元素;2.如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;3.对余下的 N - 1 个元素,重复(1)、(2)步,直到排序结束。 0aa6f7d11d97db63ca232e3a50179311.gif
(7)【选择排序】-->【堆排序 】

是一棵顺序存储的完全二叉树。其中每个结点的关键字都不大于其孩子结点的关键字,这样的堆称为小根堆;每个结点的关键字都不小于其孩子结点的关键字,这样的堆称为大根堆。

堆排序是利用堆这种数据结构所设计的一种排序算法。在数组的非降序排序中,需要使用大根堆,根据大根堆的特点可知,最大值一定在堆顶。

(8)【归并排序

归并排序是建立在归并操作上的一种有效的排序算法,该算法是分治法的典型应用,各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,一般用于总体无序,但各子项相对有序的数列。

fd52dc6b47ea4c1af2db5a62f060d652.gif

(9)【基数排序

基数排序:对待排序的N个元素进行若干趟的“分配”与“收集”来实现排序。
假设有欲排数据序列:73  22  93  43  55  14  28  65  39  81。

首先根据个位数值,在遍历数据时将它们各自分配到编号0至9的桶中,结果如下:

91f518b3ce3ba9a977b266a2e1d798ee.png

分配结束后,接下来将所有桶中数据按桶号由小到大依次重新收集串接起来,得到如下仍然无序的数据序列:81  22  73  93  43  14  55  65  28  39。接着,根据十位数值分配,结果如下:

0a8ab67d3b9717448040bc43f47192e7.png

分配结束后,接下来再将所有桶中的数据依次收集串接起来,得到如下数据序列:14  22  28  39  43  55  65  73  81  93。

以上是 内部排序,所有的排序算法在408真题中都出现过,当然真题中也有涉及 外部排序,均为 多路归并排序,关于多路归并排序中如何构造 最佳归并树,如何增补 虚段,请听下次讲解!

欢迎关注【计算机考研408】,一个专注计算机考研,专心服务计算机研究生的务实平台!


欢迎加入“21年计算机考研408”QQ群810788408,群内有丰富的考研最新资料,应有尽有,欢迎所有计算机考研的同学!


更多学习帮助,可加微信:

f4f392ebf6860c617060b235f6f46ad4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值