课件8内排序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优点:
小元素跳跃式前移 最后一趟增量为1时,序列已基本有序 平均性能优于直接插入排序
数据结构
7 查找
例:关键字序列 T=(49,38,65,97, 76, 13, 27, 49*,55, 04)
r[i] 初态:
0 1 2 3 4 5 6 7 8 9 10 49 38 65 97 76 13 27 49* 55 04
数据结构
7 查找
算法分析
49 25* 25 21 16 08
最坏情况下: •需 n-1趟排序,第i趟比较n-i次,移动3(n-i)次
n1 (n i)
1 (n 2
n)
i 1
2
n
3
(n i) 3 (n 2 n)
i 1
2
•时间复杂度为 o(n2)
•空间复杂度为 o(1)
•是一种稳定的排序方法
7 查找
49 25* 16
08
2
3
4
5
21 25* 49 25
pivotkey 21 25* 49 25
pivotkey 21 25* 49 25
数据结构
7 查找
08
16
21
25 25* 49
数据结构
快速排序
7 查找
①每一趟的子表的形成是采用从两头 向中间交替式逼近法;
②由于每趟中对各子表的操作都相似, 可采用递归算法。
数据结构
希尔排序
算法思想的出发点: 直接插入排序在基本有序时,效率较高 在待排序的记录个数较少时,效率较高
7 查找
基本思想:
先将整个待排记录序列分割成若干子序列,分别进 行直接插入排序,待整个序列中的记录“基本有 序”时,再对全体记录进行一次直接插入排序。
数据结构
希尔排序
7 查找
技巧:
子序列的构成不是简单地“逐段分割” 将相隔某个增量dk的记录组成一个子序列 让增量dk逐趟缩短(例如依次取5,3,1) 直到dk=1为止。
2
数据结构
7 查找
堆排序
什么是堆?
n个元素的序列{k1,k2,…,kn},当且仅当满
足下列关系时,成为堆:
kki i
k2i k2i1
或kki i
k2i k2i1
– 如果将序列看成一个完全二叉树,非终端结 点的值均小于或大于左右子结点的值。
数据结构
7 查找
– 利用树的结构特征来描述堆,所以树只是作为堆 的描述工具,堆实际是存放在线形空间中的。
存放在数据表中
按关键字排序
2. 排序的目的是什么? ——便于查找!
数据结构
7 查找
3. 什么叫内部排序?什么叫外部排序?
• 若待排序记录都在内存中,称为内部排序;
• 若待排序记录一部分在内存,一部分在外存,则 称为外部排序。
注:外部排序时,要将数据分批调入内存来排序,中间 结果还要及时放入外存,显然外部排序要复杂得多。
数据结构
8.3 交换排序
7 查找
基本思想:
两两比较,如果发生逆序则交换,直到所有记录都排 好序为止。
起泡排序O(n2) 快速排序O( nlog2n )
数据结构
起泡排序
7 查找
基本思想:每趟不断将记录两两比较,并按 “前小后大” 规则交换
21,25,49, 25*,16, 08 21,25,25*,16, 08 , 49 21,25, 16, 08 ,25*,49 21,16, 08 ,25, 25*,49 16,08 ,21, 25, 25*,49 08,16, 21, 25, 25*,49
(2)将r[1..n-1]重新调整为堆,交换r[1]和r[n-1] ,则r[n-1]为关键字次大的记录。
(3)循环n-1次,直到交换了r[1]和r[2]为止,得 到了一个非递减的有序序列r[1..n]。
如何调整? ?
数据结构
7 查找
如何将无序序列建成堆
[ 1 ] 30
[ 2 ] 60
[3]
8
[ 4 ] 40
7 查找
数据结构
7 查找
数据结构
算法分析
• 设对象个数为n,则执行n-1趟 • 比较次数和移动次数与初始排列有关
•最好情况下: • 每趟只需比较 1 次,不移动
• 总比较次数为 n-1
08 16 21 25 25* 49
7 查找
算法分析
49 25* 25 21 16 08
最坏情况下:第 i 趟比较i次,移动i+1次
0
A
i
1
2
3
4
13 49 65 97
j
B
7 76 80
7 查找
k
0
1
2
3
4
5
6
7
C
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
k
0
1
2
3
4
5
6
7
C
7
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
✓ dk 值较大,子序列中对象较少,速度较快;
✓ dk 值逐渐变小,子序列中对象变多,但大多数 对象已基本有序,所以排序速度仍然很快。
数据结构
7 查找
算法分析
•时间复杂度是n和d的函数:
O(n1.25)~O(1.6n1.25)—经验公式 •空间复杂度为 o(1) •是一种不稳定的排序方法
✓如何选择最佳d序列,目前尚未解决 ✓最后一个增量值必须为1,无除1以外的公因子 ✓不宜在链式存储结构上实现
3
4
5
最小者 25
i =5
08
16
21
25*
25
49 无交换
结果
08
16
21
25*
25
49
各趟排序后的结果
数据结构
7 查找
数据结构
7 查找
算法分析
移动次数 最好情况:0 最坏情况:3(n-1)
时间复杂度:O(n²) 空间复杂度:O(1) 不稳定
比较次数:
n1 (n i) 1 (n2 n)
i1
0
A
B
i
1
2
3
4
13 49 65 97
[ 5 ] 70
60
2
40
70
4
5
30 1
12 6
8
3 10 7
[ 6 ] 12 [ 7 ] 10
思考:有n 个结点的完全二叉树,最 后一个分支结点的标号是多少?n/2
数据结构
7 查找
从第n/2个元素起,至第一个元素止,进行反复筛选
[ 1 ] 70
[ 2 ] 60
[ 3 ] 12
[ 4 ] 40
[ 5 ] 30
第1趟 (dk=5)
4193 3287 4695* 9575 7064 1439 2378 4695* 5957 0746
第2趟 (dk=3)
13 2074 49* 5358 0247 49 3585 65 97 76
第3趟 (dk=1)
1034 0143 4297* 38 4297* 49 55 65 9776 7967
数据结构
7 查找
简单选择排序
最小者 08
i =1
21
25
49
25*
16
交换21,08
08
最小者 16
i=2
08
25
49
25*
16
交换25,16
21
最小者 21
i=3
08
16
49
25*
25
21 交换49,21
数据结构
7 查找
简单选择排序
最小者 25*
i =4
08
16
21
25*
25
49 无交换
0
1
2
数据结构
7 查找
8 内排序
数据结构
7 查找
教学目标
1. 掌握排序的基本概念和各种排序方法的特点,并 能加以灵活应用
2. 熟练掌握直接插入排序、起泡排序、直接选择排 序、快速排序、归并排序、堆排序的排序算法及 其性能分析
数据结构
8.1 概述
7 查找
1. 什么是排序?
将一组杂乱无章的数据按一定规律顺次排列起来。
时间复杂度不同
简单排序O(n2) 先进排序O( nlog2n )
数据结构
8.2 插入排序
基本思想:
7 查找
每步将一个待排序的对象,按其关键码大小,插入 到前面已经排好序的一组对象的适当位置上,直到对 象全部插入为止。
即边插入边排序,保证子序列中随时都是排好序的
数据结构
插入排序算法分类
直接插入排序
[6]
8
[ 7 ] 10
堆
60
2
40
30
4
5
70
1
12
3
8
10
6
7
数据结构
7 查找
堆的重新调整
交换r[1]和r[n]后,如何将r[1..n-1]重新调整,使之成 为新堆?
筛 选
✓将根结点r[1]与左、右子树根结点比较,并与小者 交换 ✓重复直至叶子结点,得到新的堆
数据结构
算法分析
时间效率:O(nlog2n) 空间效率:O(1) 稳 定 性:不稳定 适用于n 较大的情况
1
56
8 10 16 4
10 2 4
数据结构
7 查找
判定(80,75,40,62,73,35,28,50,38,25,47,15)是否为堆
完全二叉树
80
75
40
62
73
35
28
50 38 25 47 15
大根堆
数据结构
7 查找
堆排序 基本思想:
如何建??
(1)将序列r[1..n] 建初堆,交换r[1]和r[n],则 r[n]为关键字最大的记录。
7 查找
数据结构
8.5 归并排序
7 查找
归并:将两个或两个以上的有序表组合成一个新有序表
2-路归并排序 排序过程 ✓ 初始序列看成n个有序子序列,每个子序列长度为1 ✓ 两两合并,得到n/2个长度为2或1的有序子序列 ✓ 再两两合并,重复直至得到一个长度为n的有序序
列为止
数据结构
将两个顺序表合并成一个有序表
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
C
k
1
2
3
4
7 13 49
5
6
7
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13 49
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
数据结构
7 查找
4.排序算法的好坏如何衡量?
• 时间效率——排序速度(比较次数与移动次数) • 空间效率——占内存辅助空间的大小 • 稳定性——A和B的关键字相等,排序后A、B的先后
次序保持不变,则称这种排序算法是稳定的。
数据结构
排序算法分类
规则不同
插入排序 交换排序 选择排序 归并排序
7 查找
(09,17,65,23,45,78,87,53,31) (87,78,53,45,65,09,31,17,23)
堆顶元素(根)为最小值或最大值
数据结构
7 查找
16
11
9
1
2
6
10 5 6 8 11 5 9 8
1 24
大根堆
12 16 14
小根堆
数据结构
7 查找
Hale Waihona Puke Baidu
× 16
11
9
1
2
9
11 5 6 8
比较次数 移动次数
n (n 2)(n 1)
i
i2
2
n (i 1) (n 4)(n 1)
i2
2
数据结构
算法分析
•时间复杂度为 o(n2)
•空间复杂度为 o(1) •是一种稳定的排序方法
7 查找
数据结构
直接插入排序
减少关键字间的比较次数
7 查找
折半插入排序
• 在插入 r[i] 时,利用折半查找法寻 找 r[i] 的插入位置
j
7 76 80
7 查找
0
1
2
3
k
4
5
6
7
C
7 13 49 65
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13 49 65
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13 49 65 76
数据结构
起泡排序
优点:每趟结束时,不仅能挤出一个最大值到最后 面位置,还能同时部分理顺其他元素; 一旦下趟没有交换,还可提前结束排序
数据结构
7 查找
算法分析
08 16 21 25 25* 49
• 设对象个数为n
• 比较次数和移动次数与初始排列有关
最好情况下:
•只需 1趟排序,比较次数为 n-1,不移动
数据结构
算法分析
7 查找
时间效率:O(nlog2n) —每趟确定的元素呈指数增加 空间效率:O(log2n)—递归要用到栈空间 稳 定 性: 不稳定 —可选任一元素为支点。
数据结构
8.4 选择排序
7 查找
基本思想:
每一趟在后面 n-i +1个中选出关键码最小的对象, 作 为有序序列的第 i 个记录
折半插入排序 希尔排序
7 查找 最简单的排序法!
数据结构
直接插入排序
7 查找
排序过程:整个排序过程为n-1趟插入,即先 将序列中第1个记录看成是一个有序子序列, 然后从第2个记录开始,逐个进行插入,直至 整个序列有序。
数据结构
直接插入排序
例(13,6,3,31,9,27,5,11)
【13】, 6, 3, 31, 9, 27, 5, 11 【6, 13】, 3, 31, 9, 27, 5, 11 【3, 6, 13】, 31, 9, 27, 5, 11 【3, 6, 13,31】, 9, 27, 5, 11 【3, 6, 9, 13,31】, 27, 5, 11 【3, 6, 9, 13,27, 31】, 5, 11 【3, 5, 6, 9, 13,27, 31】, 11 【3, 5, 6, 9, 11,13,27, 31】
数据结构
快速排序
7 查找
基本思想:
•任取一个元素 (如第一个) 为中心
•所有比它小的元素一律前放,比它大的元素一律 后放,形成左右两个子表;
•对各子表重新选择中心元素并依此规则调整,直 到每个子表的元素只剩一个
数快据速结排构序
pivotkey
21 25
0
1
pivotkey
08 16
08 16 08 16
小元素跳跃式前移 最后一趟增量为1时,序列已基本有序 平均性能优于直接插入排序
数据结构
7 查找
例:关键字序列 T=(49,38,65,97, 76, 13, 27, 49*,55, 04)
r[i] 初态:
0 1 2 3 4 5 6 7 8 9 10 49 38 65 97 76 13 27 49* 55 04
数据结构
7 查找
算法分析
49 25* 25 21 16 08
最坏情况下: •需 n-1趟排序,第i趟比较n-i次,移动3(n-i)次
n1 (n i)
1 (n 2
n)
i 1
2
n
3
(n i) 3 (n 2 n)
i 1
2
•时间复杂度为 o(n2)
•空间复杂度为 o(1)
•是一种稳定的排序方法
7 查找
49 25* 16
08
2
3
4
5
21 25* 49 25
pivotkey 21 25* 49 25
pivotkey 21 25* 49 25
数据结构
7 查找
08
16
21
25 25* 49
数据结构
快速排序
7 查找
①每一趟的子表的形成是采用从两头 向中间交替式逼近法;
②由于每趟中对各子表的操作都相似, 可采用递归算法。
数据结构
希尔排序
算法思想的出发点: 直接插入排序在基本有序时,效率较高 在待排序的记录个数较少时,效率较高
7 查找
基本思想:
先将整个待排记录序列分割成若干子序列,分别进 行直接插入排序,待整个序列中的记录“基本有 序”时,再对全体记录进行一次直接插入排序。
数据结构
希尔排序
7 查找
技巧:
子序列的构成不是简单地“逐段分割” 将相隔某个增量dk的记录组成一个子序列 让增量dk逐趟缩短(例如依次取5,3,1) 直到dk=1为止。
2
数据结构
7 查找
堆排序
什么是堆?
n个元素的序列{k1,k2,…,kn},当且仅当满
足下列关系时,成为堆:
kki i
k2i k2i1
或kki i
k2i k2i1
– 如果将序列看成一个完全二叉树,非终端结 点的值均小于或大于左右子结点的值。
数据结构
7 查找
– 利用树的结构特征来描述堆,所以树只是作为堆 的描述工具,堆实际是存放在线形空间中的。
存放在数据表中
按关键字排序
2. 排序的目的是什么? ——便于查找!
数据结构
7 查找
3. 什么叫内部排序?什么叫外部排序?
• 若待排序记录都在内存中,称为内部排序;
• 若待排序记录一部分在内存,一部分在外存,则 称为外部排序。
注:外部排序时,要将数据分批调入内存来排序,中间 结果还要及时放入外存,显然外部排序要复杂得多。
数据结构
8.3 交换排序
7 查找
基本思想:
两两比较,如果发生逆序则交换,直到所有记录都排 好序为止。
起泡排序O(n2) 快速排序O( nlog2n )
数据结构
起泡排序
7 查找
基本思想:每趟不断将记录两两比较,并按 “前小后大” 规则交换
21,25,49, 25*,16, 08 21,25,25*,16, 08 , 49 21,25, 16, 08 ,25*,49 21,16, 08 ,25, 25*,49 16,08 ,21, 25, 25*,49 08,16, 21, 25, 25*,49
(2)将r[1..n-1]重新调整为堆,交换r[1]和r[n-1] ,则r[n-1]为关键字次大的记录。
(3)循环n-1次,直到交换了r[1]和r[2]为止,得 到了一个非递减的有序序列r[1..n]。
如何调整? ?
数据结构
7 查找
如何将无序序列建成堆
[ 1 ] 30
[ 2 ] 60
[3]
8
[ 4 ] 40
7 查找
数据结构
7 查找
数据结构
算法分析
• 设对象个数为n,则执行n-1趟 • 比较次数和移动次数与初始排列有关
•最好情况下: • 每趟只需比较 1 次,不移动
• 总比较次数为 n-1
08 16 21 25 25* 49
7 查找
算法分析
49 25* 25 21 16 08
最坏情况下:第 i 趟比较i次,移动i+1次
0
A
i
1
2
3
4
13 49 65 97
j
B
7 76 80
7 查找
k
0
1
2
3
4
5
6
7
C
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
k
0
1
2
3
4
5
6
7
C
7
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
✓ dk 值较大,子序列中对象较少,速度较快;
✓ dk 值逐渐变小,子序列中对象变多,但大多数 对象已基本有序,所以排序速度仍然很快。
数据结构
7 查找
算法分析
•时间复杂度是n和d的函数:
O(n1.25)~O(1.6n1.25)—经验公式 •空间复杂度为 o(1) •是一种不稳定的排序方法
✓如何选择最佳d序列,目前尚未解决 ✓最后一个增量值必须为1,无除1以外的公因子 ✓不宜在链式存储结构上实现
3
4
5
最小者 25
i =5
08
16
21
25*
25
49 无交换
结果
08
16
21
25*
25
49
各趟排序后的结果
数据结构
7 查找
数据结构
7 查找
算法分析
移动次数 最好情况:0 最坏情况:3(n-1)
时间复杂度:O(n²) 空间复杂度:O(1) 不稳定
比较次数:
n1 (n i) 1 (n2 n)
i1
0
A
B
i
1
2
3
4
13 49 65 97
[ 5 ] 70
60
2
40
70
4
5
30 1
12 6
8
3 10 7
[ 6 ] 12 [ 7 ] 10
思考:有n 个结点的完全二叉树,最 后一个分支结点的标号是多少?n/2
数据结构
7 查找
从第n/2个元素起,至第一个元素止,进行反复筛选
[ 1 ] 70
[ 2 ] 60
[ 3 ] 12
[ 4 ] 40
[ 5 ] 30
第1趟 (dk=5)
4193 3287 4695* 9575 7064 1439 2378 4695* 5957 0746
第2趟 (dk=3)
13 2074 49* 5358 0247 49 3585 65 97 76
第3趟 (dk=1)
1034 0143 4297* 38 4297* 49 55 65 9776 7967
数据结构
7 查找
简单选择排序
最小者 08
i =1
21
25
49
25*
16
交换21,08
08
最小者 16
i=2
08
25
49
25*
16
交换25,16
21
最小者 21
i=3
08
16
49
25*
25
21 交换49,21
数据结构
7 查找
简单选择排序
最小者 25*
i =4
08
16
21
25*
25
49 无交换
0
1
2
数据结构
7 查找
8 内排序
数据结构
7 查找
教学目标
1. 掌握排序的基本概念和各种排序方法的特点,并 能加以灵活应用
2. 熟练掌握直接插入排序、起泡排序、直接选择排 序、快速排序、归并排序、堆排序的排序算法及 其性能分析
数据结构
8.1 概述
7 查找
1. 什么是排序?
将一组杂乱无章的数据按一定规律顺次排列起来。
时间复杂度不同
简单排序O(n2) 先进排序O( nlog2n )
数据结构
8.2 插入排序
基本思想:
7 查找
每步将一个待排序的对象,按其关键码大小,插入 到前面已经排好序的一组对象的适当位置上,直到对 象全部插入为止。
即边插入边排序,保证子序列中随时都是排好序的
数据结构
插入排序算法分类
直接插入排序
[6]
8
[ 7 ] 10
堆
60
2
40
30
4
5
70
1
12
3
8
10
6
7
数据结构
7 查找
堆的重新调整
交换r[1]和r[n]后,如何将r[1..n-1]重新调整,使之成 为新堆?
筛 选
✓将根结点r[1]与左、右子树根结点比较,并与小者 交换 ✓重复直至叶子结点,得到新的堆
数据结构
算法分析
时间效率:O(nlog2n) 空间效率:O(1) 稳 定 性:不稳定 适用于n 较大的情况
1
56
8 10 16 4
10 2 4
数据结构
7 查找
判定(80,75,40,62,73,35,28,50,38,25,47,15)是否为堆
完全二叉树
80
75
40
62
73
35
28
50 38 25 47 15
大根堆
数据结构
7 查找
堆排序 基本思想:
如何建??
(1)将序列r[1..n] 建初堆,交换r[1]和r[n],则 r[n]为关键字最大的记录。
7 查找
数据结构
8.5 归并排序
7 查找
归并:将两个或两个以上的有序表组合成一个新有序表
2-路归并排序 排序过程 ✓ 初始序列看成n个有序子序列,每个子序列长度为1 ✓ 两两合并,得到n/2个长度为2或1的有序子序列 ✓ 再两两合并,重复直至得到一个长度为n的有序序
列为止
数据结构
将两个顺序表合并成一个有序表
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
C
k
1
2
3
4
7 13 49
5
6
7
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13 49
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
数据结构
7 查找
4.排序算法的好坏如何衡量?
• 时间效率——排序速度(比较次数与移动次数) • 空间效率——占内存辅助空间的大小 • 稳定性——A和B的关键字相等,排序后A、B的先后
次序保持不变,则称这种排序算法是稳定的。
数据结构
排序算法分类
规则不同
插入排序 交换排序 选择排序 归并排序
7 查找
(09,17,65,23,45,78,87,53,31) (87,78,53,45,65,09,31,17,23)
堆顶元素(根)为最小值或最大值
数据结构
7 查找
16
11
9
1
2
6
10 5 6 8 11 5 9 8
1 24
大根堆
12 16 14
小根堆
数据结构
7 查找
Hale Waihona Puke Baidu
× 16
11
9
1
2
9
11 5 6 8
比较次数 移动次数
n (n 2)(n 1)
i
i2
2
n (i 1) (n 4)(n 1)
i2
2
数据结构
算法分析
•时间复杂度为 o(n2)
•空间复杂度为 o(1) •是一种稳定的排序方法
7 查找
数据结构
直接插入排序
减少关键字间的比较次数
7 查找
折半插入排序
• 在插入 r[i] 时,利用折半查找法寻 找 r[i] 的插入位置
j
7 76 80
7 查找
0
1
2
3
k
4
5
6
7
C
7 13 49 65
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13 49 65
数据结构
0
A
B
i
1
2
3
4
13 49 65 97
j
7 76 80
7 查找
0
1
k
2
3
4
5
6
7
C
7 13 49 65 76
数据结构
起泡排序
优点:每趟结束时,不仅能挤出一个最大值到最后 面位置,还能同时部分理顺其他元素; 一旦下趟没有交换,还可提前结束排序
数据结构
7 查找
算法分析
08 16 21 25 25* 49
• 设对象个数为n
• 比较次数和移动次数与初始排列有关
最好情况下:
•只需 1趟排序,比较次数为 n-1,不移动
数据结构
算法分析
7 查找
时间效率:O(nlog2n) —每趟确定的元素呈指数增加 空间效率:O(log2n)—递归要用到栈空间 稳 定 性: 不稳定 —可选任一元素为支点。
数据结构
8.4 选择排序
7 查找
基本思想:
每一趟在后面 n-i +1个中选出关键码最小的对象, 作 为有序序列的第 i 个记录
折半插入排序 希尔排序
7 查找 最简单的排序法!
数据结构
直接插入排序
7 查找
排序过程:整个排序过程为n-1趟插入,即先 将序列中第1个记录看成是一个有序子序列, 然后从第2个记录开始,逐个进行插入,直至 整个序列有序。
数据结构
直接插入排序
例(13,6,3,31,9,27,5,11)
【13】, 6, 3, 31, 9, 27, 5, 11 【6, 13】, 3, 31, 9, 27, 5, 11 【3, 6, 13】, 31, 9, 27, 5, 11 【3, 6, 13,31】, 9, 27, 5, 11 【3, 6, 9, 13,31】, 27, 5, 11 【3, 6, 9, 13,27, 31】, 5, 11 【3, 5, 6, 9, 13,27, 31】, 11 【3, 5, 6, 9, 11,13,27, 31】
数据结构
快速排序
7 查找
基本思想:
•任取一个元素 (如第一个) 为中心
•所有比它小的元素一律前放,比它大的元素一律 后放,形成左右两个子表;
•对各子表重新选择中心元素并依此规则调整,直 到每个子表的元素只剩一个
数快据速结排构序
pivotkey
21 25
0
1
pivotkey
08 16
08 16 08 16