《数据结构》学习笔记——排序

概述

在计算机中,所谓排序就是将一组无序的记录序列调整为有序的记录序列。
一个排序算法是指一种能将一串记录序列按照某种特定的方式进行调整的一种方法。

在这里插入图片描述在这里插入图片描述

选择排序

简单选择排序

简单选择排序(Simple Selection Sort)是一种直观的排序算法,其思想是在未排序的序列中选择最小的元素和序列的首位元素交换,接下来在剩下的未排序序列中再选出最小元素与序列的第二位元素交换,依次类推,最后形成从小到大的已排序序列。

在这里插入图片描述

堆排序

堆排序(Heap Sort)是指利用堆这种数据结构所设计的一种排序算法。

堆排序的核心思想是:
利用最大堆(或者最小堆)输出堆顶元素,即最大值(或最小值),将剩余元素重新生成最大堆(或者最小堆),继续输出堆顶元素,重复此过程,直到全部元素都已输出,得到的输出元素序列即为有序序列。

实现堆排序的一种简单的做法是额外开辟一个赋值的数组空间,将堆顶元素逐一放入辅助数组中,最后再把辅助数组的内容复制回原始的数组。 这种方法的额外空间复杂度是 O(N)。

在这里插入图片描述在这里插入图片描述

插入排序

简单插入排序

简单的插入排序的核心思想:
将待排序的一组序列分为已排好的和未排序的两个部分;初始状态时,已排序序列仅包含第一个元素,未排序序列中的元素为除去第一个以外 N-1 个元素;此后将未排序序列中的元素逐一插入到已排序的序列中。如此往返,经过 N-1 次插入后,未排序序列中元素个数为0,则排序完成。

在这里插入图片描述

希尔排序

简单插入排序效率不高的一个重要原因是每次只交换相邻的两个元素,这样只能消去一对错位的元素。
希尔排序对插入排序进行改进,试图通过每次交换相隔一定距离的元素,达到排序效率上的提升。

希尔排序的基本原理是,将待排序的一组元素按一定间隔分为若干个序列,分别进行插入排序。
开始时设置的“间隔”较大,在每轮排序中将间隔逐步减小,直到“间隔”为1,也就是最后一步是进行简单插入排序。

在这里插入图片描述

希尔排序将“间隔”定义为一组增量序列,用来分割待排序列,即将位置之差等于当前增量的元素归属于同一个子序列,并分别进行插入排序;排好后再选取下一个增量,划分子序列再次排序,指定最后一个增量(一般为1)。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

交换排序

冒泡排序

冒泡排序是最简单的交换排序。
对元素个数为 N 的待排序序列进行排序时,共进行 N-1 次循环。
在第k次循环中,对从第1到第N-k个元素从前往后进行比较,每次比较相邻的两个元素,若前一个元素大于后一个元素,则两者互换位置,否则保存位置不变。 这样一次循环下来,就把第k大的元素移动到第N-k个位置上,称为第k趟的冒泡。整个过程进行了N-1趟冒泡,直到第1个和第2个元素比较完成,最终剩余最小的元素,留在第1个位置上,排序结束。

在这里插入图片描述

快速排序

快速排序也是交换排序的一种,但和冒泡排序不同的是,冒泡排序只比较相邻两个记录的顺序,而快速排序的原理是:将未排序元素根据一个作为基准的“主元”(Pivot)分为两个子序列,其中一个子序列的距离均大于主元,而另一个子序列均小于主元,然后递归地对这两个子序列用类似的方法进行排序。
本质上,快速排序使用分治法,将问题的规模减小,然后再分别进行处理。

时间复杂度下界

在这里插入图片描述
在这里插入图片描述

归并排序

归并排序是建立在归并操作基础上的一种方法。
归并操作,是指将两个已排序的子序列合并成一个有序序列的过程。

归并排序的基本思想:
将大小为N的序列看成N个长度为1的子序列,接下来将相邻子序列两两进行归并操作,形成N/2(+1)个长度为2的有序子序列;然后再继续进行相邻子序列两两归并操作,如此一直循环,直到剩下1个长度为N的序列,则该序列为原序列完成排序后的结果。

在这里插入图片描述

在这里插入图片描述

递归算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

非递归算法

在这里插入图片描述在这里插入图片描述在这里插入图片描述

学习参考资料:

《数据结构》第2版
https://www.bilibili.com/video/BV1JW411i731?p=103
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值