数据结构第九章内部排序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
st[j+1]=st[0]; }//if }//InsertSort
1、直接插入排序法
算法分析
插入第i个数据元素时,关键字值间的比较最少1 次,
最多1若i- 待排次序;列元中素有的n移个动数,据最元少素0 ,次则,要最完多+成1i排序次在。最好
情况在下最需坏进情行况-下1n 则需次进关行键字(1值+2间+的…比+n较-1,)0=n次(n元- 素次的关移键动字;
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
一趟
49 38 65 97 76 13 27 49 1次 123次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
五趟
38 49 65 76 90 13 27 49 12345次 1234567次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
改进思路 减少关键字值间的比较次数 减少数据元素的移动次数 尽可能创造待排元素序列基本有序或是待排数据元素 个数较少的场景
2、折半插入排序法
思路 在直接插入排序法中,关键字值间的比较主要用于确 定 元素的插入位置。由于插入第i个元素时,前i-1个元素已经 有序,所以可用折半查找确定其插入位置。
值 间的比较,
(3+4+…+n+1)=1()n/-2 1)(n+4)/2
次元素的移动。
1、直接插入排序法
算法时间复杂度在最好时为O ,最坏时为O( ,并需可要见一素直个接元插入的排辅序助法存在储空待间排(。数n)据元素序列已基n本2)有 少或待排数据元素个数较 时效率较高。 序
1、直接插入排序法
数据结构第九章内部排序
一、基本术语
排序 将n个性质相同的数据元素按关键字值从小到大或从大
到小排为有序序列。 内部排序
当待排数据元素的数量较少时,可将其一次全部调入内 存进行排序,即称内部排序。 外部排序
当待排数据元素的数量较大时,在排序过程中尚需对外 存进行访问,则称外部排序。
一、基本术语
3、二路插入排序法
思路 直接插入排序法在待排数据元素个数较少时效率较高 ,若先在待排元素中选择一个R作为参照,然后把关键字值 大 于R的插入在其后,关键字值小于R的插入在其前,则能缩 短元素所插入的表的长度,从而减少排序过程中关键字值 的 比较次数和元素的移动次数。
23 李刘永小强玲 8732
35 刘陈小晓玲壮 7823
42 李赵永祥强 9823
54 陈赵晓祥壮 8932
排序方法B
可能
非稳定的排序方法
排序结果
二、内部排序法分类
按排序原则分 插入排序 交换排序 选择排序 归并排序 计数排序
二、内部排序法分类
按排序的时间复杂度分 简单的内部排序法 先进的内部排序法 基数排序法
O(n2) O(nlogn) O(dn)
三、插入排序法
直接插入排序法 折半插入排序法 2路插入排序法 表插入排序法 希尔排序法
1、直接插入排序法
方法 设对数据元素序列R1,R2,…,Rn进行排序,则: ⑴仅含R1的序列是长度为1的按关键字值有序的序列;
举例
012345678
初始
49 38 65 97 76 13 27 49
for(i=2;i<=LENGTH;i++) if(st[i].key<st[i-1].key){ st[0]=st[i]; st[i]=st[i-1]; j=i-2; while(j>=1 && st[j].key>st[0].key){ st[j+1]=st[j]; j--;}
1、直接插入排序法
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
四趟
38 49 65 97 76 13 27 49 12次 123次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
2、折半插入排序法
举例
比较 移动 次数 次数
012345678
六趟
38 49 65 76 97 13 27 49 123次 1234567次
l
m
h
2、折半插入排序法
算法分析 与直接插入排序法相比,折半插入排序法减少了关键 字值间比较的次数,但没有减少元素移动的次数,因此算法 的 时间复杂度仍为O(n2),并仍需一个元素的辅助存储空间。
注意 当按次关键字进行排序时,由于可能存在关键字值相
同 的元素,因而排序结果不惟一。
举例
原序列
学号 姓名 成绩
1
王云 67
23 李刘永小强玲 8732
32 刘李小永玲强 7823
45 陈赵晓祥壮 9823
54 陈赵晓祥壮 8932
排序方法A
必然
稳定的排序方法
排序结果
举例
原序列
学号 姓名 成绩
1
王云 67
举例
比较 移动 次数 次数
012345678
二趟
38 49 65 97 76 13 27 49 1次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
三趟
38 49 65 97 76 13 27 49 1次
1、直接插入排序法
存储结构设计 #define LENGTH 8
st
0 1 49
typedef ElemType SortTable[LENGTH+1]; 2 38
3 65
4 97
5 76
6 13
7 27
8 49
1、直接插入排序法
算法 void InsertSort(SortTable &st){
六趟
13 38 49 65 76 97 27 49 123456次 123456次
1、ቤተ መጻሕፍቲ ባይዱ接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
七趟
13 27 38 49 65 76 97 49 1234次 12345次
1、直接插入排序法
算法分析
插入第i个数据元素时,关键字值间的比较最少1 次,
最多1若i- 待排次序;列元中素有的n移个动数,据最元少素0 ,次则,要最完多+成1i排序次在。最好
情况在下最需坏进情行况-下1n 则需次进关行键字(1值+2间+的…比+n较-1,)0=n次(n元- 素次的关移键动字;
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
一趟
49 38 65 97 76 13 27 49 1次 123次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
五趟
38 49 65 76 90 13 27 49 12345次 1234567次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
改进思路 减少关键字值间的比较次数 减少数据元素的移动次数 尽可能创造待排元素序列基本有序或是待排数据元素 个数较少的场景
2、折半插入排序法
思路 在直接插入排序法中,关键字值间的比较主要用于确 定 元素的插入位置。由于插入第i个元素时,前i-1个元素已经 有序,所以可用折半查找确定其插入位置。
值 间的比较,
(3+4+…+n+1)=1()n/-2 1)(n+4)/2
次元素的移动。
1、直接插入排序法
算法时间复杂度在最好时为O ,最坏时为O( ,并需可要见一素直个接元插入的排辅序助法存在储空待间排(。数n)据元素序列已基n本2)有 少或待排数据元素个数较 时效率较高。 序
1、直接插入排序法
数据结构第九章内部排序
一、基本术语
排序 将n个性质相同的数据元素按关键字值从小到大或从大
到小排为有序序列。 内部排序
当待排数据元素的数量较少时,可将其一次全部调入内 存进行排序,即称内部排序。 外部排序
当待排数据元素的数量较大时,在排序过程中尚需对外 存进行访问,则称外部排序。
一、基本术语
3、二路插入排序法
思路 直接插入排序法在待排数据元素个数较少时效率较高 ,若先在待排元素中选择一个R作为参照,然后把关键字值 大 于R的插入在其后,关键字值小于R的插入在其前,则能缩 短元素所插入的表的长度,从而减少排序过程中关键字值 的 比较次数和元素的移动次数。
23 李刘永小强玲 8732
35 刘陈小晓玲壮 7823
42 李赵永祥强 9823
54 陈赵晓祥壮 8932
排序方法B
可能
非稳定的排序方法
排序结果
二、内部排序法分类
按排序原则分 插入排序 交换排序 选择排序 归并排序 计数排序
二、内部排序法分类
按排序的时间复杂度分 简单的内部排序法 先进的内部排序法 基数排序法
O(n2) O(nlogn) O(dn)
三、插入排序法
直接插入排序法 折半插入排序法 2路插入排序法 表插入排序法 希尔排序法
1、直接插入排序法
方法 设对数据元素序列R1,R2,…,Rn进行排序,则: ⑴仅含R1的序列是长度为1的按关键字值有序的序列;
举例
012345678
初始
49 38 65 97 76 13 27 49
for(i=2;i<=LENGTH;i++) if(st[i].key<st[i-1].key){ st[0]=st[i]; st[i]=st[i-1]; j=i-2; while(j>=1 && st[j].key>st[0].key){ st[j+1]=st[j]; j--;}
1、直接插入排序法
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
四趟
38 49 65 97 76 13 27 49 12次 123次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
2、折半插入排序法
举例
比较 移动 次数 次数
012345678
六趟
38 49 65 76 97 13 27 49 123次 1234567次
l
m
h
2、折半插入排序法
算法分析 与直接插入排序法相比,折半插入排序法减少了关键 字值间比较的次数,但没有减少元素移动的次数,因此算法 的 时间复杂度仍为O(n2),并仍需一个元素的辅助存储空间。
注意 当按次关键字进行排序时,由于可能存在关键字值相
同 的元素,因而排序结果不惟一。
举例
原序列
学号 姓名 成绩
1
王云 67
23 李刘永小强玲 8732
32 刘李小永玲强 7823
45 陈赵晓祥壮 9823
54 陈赵晓祥壮 8932
排序方法A
必然
稳定的排序方法
排序结果
举例
原序列
学号 姓名 成绩
1
王云 67
举例
比较 移动 次数 次数
012345678
二趟
38 49 65 97 76 13 27 49 1次
1、直接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
三趟
38 49 65 97 76 13 27 49 1次
1、直接插入排序法
存储结构设计 #define LENGTH 8
st
0 1 49
typedef ElemType SortTable[LENGTH+1]; 2 38
3 65
4 97
5 76
6 13
7 27
8 49
1、直接插入排序法
算法 void InsertSort(SortTable &st){
六趟
13 38 49 65 76 97 27 49 123456次 123456次
1、ቤተ መጻሕፍቲ ባይዱ接插入排序法
方法 ⑵依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值有序 的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
012345678
七趟
13 27 38 49 65 76 97 49 1234次 12345次