数据结构——排序

需掌握各个排序算法的复杂度,原理,及结果是否稳定

1.冒泡排序

原理:重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序
以{5,4,2,7,3}为例子
第一步:
在这里插入图片描述
2.由于最大的数在最后一位,第二趟冒泡排序交换的范围是第一位到倒数第二位
在这里插入图片描述
3.由于最后两位是整个数组最大的两个数,因此第三趟冒泡排序交换的范围是第一位到倒数第三位
在这里插入图片描述
4.在第四轮遍历时,2和3不交换,因此整个冒牌排序结束

2.快速排序

基本思想:
1.从数列中取出一个数作为基准数
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边
3.再对左右区间重复第二步,直到各区间只有一个数
以{19,97,9,17,1,8}为例子,以19为基准点
在这里插入图片描述
1.首先去获得R指针所指的值,得到8,由于8比基准数19要小,因此要放到左指针处,同时L指针往右移一格
在这里插入图片描述
2.去获得L指针所指的值,得到97,由于97比基准数19要大,因此要放到右指针处,同时R指针往左移一格
在这里插入图片描述
3.此时获得R指针所指的值,得到1,由于1比基准是19要小,因此需要放到左指针处,同时L指针往右移一格
在这里插入图片描述
4.此时获得L指针所指的值,得到9,由于9比基准是19要小,无需将9放到R指针处,当此数没有被移动时,继续移动当前下标,即右移L指针
在这里插入图片描述
5.此时获得L指针所指的值,得到17,由于17比基准是19要小,无需将17放到R指针处,当此数没有被移动时,继续移动当前下标,即右移L指针
在这里插入图片描述
6.此时L与R重合,将19放入重合指针处,同时第一次快排结束,分为左子序列和右子序列
在这里插入图片描述
7.对左子序列和右子序列继续做递归

3.二路归并排序

思想:将待排序序列分为若干个子序列,每个子序列是有序的,然后再把有序子序列合并为整体有序序列(分组数为1)
以{68,70,69,33,88,9,6,58,55}为例子
1.初始时将9个元素中的每一个元素是为一个有序分组,共分为9个长度为1的有序分组
2.对9个有序的分组进行两两合并,并在分组内进行排序,得到4个长度为2的序列,剩余的单个元素分组保留不动
在这里插入图片描述
3.对此时长度为2的序列继续进行两两归并,将4个长度为2的序列归并为2个长度为4的序列,剩余的单个元素分组保留不动
在这里插入图片描述
4.将2个长度为4的序列归并为1个长度为8的序列,剩余的单个元素分组保留不动
在这里插入图片描述
5.此时只剩下两个分组,将两者归并,剩一个分组,二路归并排序结束
在这里插入图片描述
希尔排序是不稳定的
堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆,但不常考,根据自身需要去理解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值