《数据结构》第8章 排序

本文详细介绍了排序算法,包括插入排序(直接插入、折半插入、Shell排序)、交换排序(冒泡排序、快速排序)、选择排序(简单选择、树型选择、堆排序)以及归并排序和基数排序。特别强调了快速排序和堆排序的重要性,并提供了冒泡排序和快速排序的实例分析,指出快速排序在效率上的优势。
摘要由CSDN通过智能技术生成

《数据结构》第8章 排序

第8章 排序

一定要掌握:快速排序+堆排序
冒泡排序与简单选择排序的区别:两者都是依次选出最小(最大),但前者需要两两交换,后者直接选出插入该放的位置就结束了。
需要内存最大:快速排序<归并排序<基数排序
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

8.1 基本概念和排序方法概述

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

8.2 插入排序——从左到右逐一插入已排序的

在这里插入图片描述

方法1:直接插入排序(Straight Insert Sort)——顺序寻找插入位置

1.基本思想

在这里插入图片描述

2.算法步骤

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

3.性能分析(O(n2) O(1) 稳定)

在这里插入图片描述

方法2:折半插入排序(Binary Insert Sort)——折半寻找插入位置

1.基本思想

在这里插入图片描述

2.算法步骤

在这里插入图片描述要排序的数<m,比较前半部分,high=m-1
要排序的数≥m,比较后半部分,low=m+1

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

3.性能分析(O(n2) O(1) 稳定)

在这里插入图片描述

方法3: Shell 排序(Shell Sort)=缩小增量排序(Diminishing-increment sort)——分组后进行直接插入排序

1.基本思想

在这里插入图片描述

2.算法步骤

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

3.性能分析(O(n1.3) O(0) 不稳定)

在这里插入图片描述

8.3 交换排序 ——两两比较待排序关键字

在这里插入图片描述

方法1:冒泡排序(Bubble Sort)——从左到右比较,找最大,石沉;从右到左比较,找最小,冒泡

1.基本思想

在这里插入图片描述

2.算法步骤

在这里插入图片描述原序列:17,3,25,14,20,9
第一趟:交换5次,冒出第1个泡
17,3,25,14,20,9
17,3,25,14,9,20
17,3,25,9,14,20
17,3,9,25,14,20
17,3,9,25,14,20
3,17,9,25,14,20
第二趟:交换4次,冒出第2个泡
3,17,9,25,14,20
3,17,9,25,14,20
3,17,9,14,25,20
317,9,14,25,20
39,17,14,25,20
第三趟:交换3次,冒出第3个泡
39,17,14,25,20
39,17,14,20,25
3917,14,20,25
3914,17,20,25
第四趟:交换2次,冒出第4个泡
3914,17,20,25
391417,20,25
3914172025
不动,可以停止了
在这里插入图片描述在这里插入图片描述在这里插入图片描述石沉

3.性能分析(O(n2) O(1) 稳定)

在这里插入图片描述

方法2:【重点】快速排序(Quick Sort)——插旗杆

1.基本思想

在这里插入图片描述

2.算法步骤(3道例题)

在这里插入图片描述在这里插入图片描述每次都将最前面的一个元素作为控制值。low>high就换,low<high就动空房子(控制值/界点)另一头指针。当所有旗杆中间的间隔≤1时,整个快速排序结束。
旗杆 待排序
☐ 21 25 49 25* 16 08

第一趟快速排序:21作为旗杆
21 ☐ 25 49 25* 16 08——low(☐)>high(08),交换
21 08 25 49 25* 16 ☐——low++,low>high,交换
21 08 ☐ 49 25* 16 25——high–,low>high,交换
21 08 16 49 25* ☐ 25——low++,low>high,交换
21 08 16 ☐ 25* 49 25——high–,low<high,不交换,high–,low=high,第一趟快速排序结束
☐ 08 16 21 25* 49 25——第一趟快速排序结果,旗杆左边都比它小,右边都比它大

第二趟快速排序:08作为旗杆
08 ☐ 16 21 25* 49 25——low(☐)<high(16),不交换,high–
08 ☐ 16 21 25* 49 25——low=high,第二趟快速排序结束
08 16 21 25* 49 25——第二趟快速排序结果

第三趟快速排序:25*作为旗杆
25* 08 16 21 ☐ 49 25——low(☐)=high(25),不交换,high–
25* 08 16 21 ☐ 49 25——low(☐)<high(49),不交换,high–
25* 08 16 21 ☐ 49 25——low=high,第三趟快速排序结束
08 16 21 25* 49 25——第三趟快速排序结果

第四趟快速排序:49作为旗杆
49 08 16 21 25* ☐ 25——low>high,交换
49 08 16 21 25* 25 ☐ ——low++,low=high,第四趟快速排序结束
08 16 21 25* 25 49——第四趟快速排序结果

第一趟快速排序

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

第二趟快速排序

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

第三趟快速排序

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

第四趟快速排序

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

3.性能分析(O(nlog2n) O(log2n) 不稳定)

在这里插入图片描述

8.4 选择排序——依次将未排序组中关键字码最小的记录插入已排序组中

在这里插入图片描述

方法1:简单选择排序(Simple selection Sort)——一般用来编程,直接选出插入该放的位置

1.基本思想

在这里插入图片描述

2.算法步骤

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

3.性能分析(O(n2) O(1) 不稳定)

在这里插入图片描述

方法2:树型选择排序(Tournament Sort)——搞最小,换∞

1.基本思想

在这里插入图片描述

2.算法步骤

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

3.性能分析(O(nlog2n) O(n) 稳定)

在这里插入图片描述

方法3:【重点】堆排序(Heap Sort)

1.定义

在这里插入图片描述

2.堆的性质

在这里插入图片描述

3.算法步骤

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

1.初始堆的建立

如何初始化一个堆?
1. 按照完全二叉树的方法顺序地将要排序的数据连成一棵树;
2. 从最后一个叶子结点开始,自下向上,自右向左地将每一个孩子结点与双亲结点进行比较(加速:将每一个有孩子的结点进行比较)。如果是小根堆,只要双亲大于孩子结点就要交换。
3. 当双亲与孩子结点进行交换后,还要比较该孩子与其孩子的大小,这样层层比较,才能得到最终排序。
堆排序结果
在这里插入图片描述更快的方法

2.初始化后堆排序过程——根和最后一个节点交换+重新成堆+交换+成堆+…

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

4.性能分析(O(nlog2n) O(1) 不稳定)

在这里插入图片描述

8.5 归并排序——对两个或两个以上的有序结点序列的合并

在这里插入图片描述

方法1: 2-路归并——两两归并

1.基本思想

在这里插入图片描述

2.算法步骤

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

3.性能分析(O(nlog2n) O(n) 稳定)

在这里插入图片描述

方法2:多路归并排序

在这里插入图片描述

8.6 基数排序——分配 收集

1.定义

在这里插入图片描述

2.算法步骤

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

3.性能分析(O(d(n+r)) O(n+2r) 稳定)

在这里插入图片描述

习题

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值