第十章排序-例题

第3趟:17,7,18,32,40,60,65,73,85
第4趟:7,17,18,32,40,60,65,73,85
第5趟:7,17,18,32,40,60,65,73,85
第5趟无元素交换,则排序结束。
例题2:已知序列{503,87,512,61,908,170,897,275,652,462},采用快速排序法对该序列作升序排序时的每一趟的结果。
第7趟:61,87,170,275,462,503 [512,652] 897 [908 ]
第8趟:61,87,170,275,462,503,512 [652] 897 [908 ]
第9趟:61,87,170,275,462,503,512,652,897 [908 ]
第10趟:61,87,170,275,462,503,512,652,897,908
第1趟:[ 10,18 ] [3,4 ] [6,12 ] [1,9 ] [ 8,15]
第2趟:[3,4,10,18 ] [1,6,9,12 ] [ 8,15 ]
第3趟:[1,3,4,6,9,10,12,18 ] [ 8,15 ]
第4趟:[1,3,4,6,8,9,10,12,15,18 ]
第4趟归并完毕,则排序结束。
第3趟:[61,87 ]170 [275] 462,503 [897,908,652,512 ]
第4趟:61 [87 ]170 [275] 462,503 [897,908,652,512 ]
第5趟:61,87,170 [275] 462,503 [897,908,652,512 ]
第6趟:61,87,170,275,462,503 [897,908,652,512 ]
例题1:已知序列{17,18,60,40,7,32,73,65,85},请给出采用冒泡排序法对该序列作升序排序时的每一趟的结果。
解:依题意,采用冒泡排序法排序的各趟的结果如下:
初始:17,18,60,40,7,32,73,65,85
第1趟:17,18,40,7,32,60,65,73,85
第2趟:17,18,7,32,40,60,65,73,85
解:依题意,采用基数排序法排序的各趟的结果如下:
初始:503,87,512,61,908,170,897,275,652,462
第1趟(按个位排序):170,61,512,652,462,503,275,87,897,908
第2趟(按十为排序):503,908,512,652,61,462,170,275,87,897
for ( j=i+1; j<=n-i; j++)
if (r[j].key>r[j+1].key )
{
b=1;
t=r[j];
r[j]=r[j+1];
r[j+1]=t;
}
i++;
}
}
例题3:已知序列{42,13,24,91,23,16,05,88},试给出对其建大根堆过程中完全二叉树及其存储结果的变化情况。
解:
依题意,建大根堆过程中完全二叉树及其存储结果的变化情况如图10.1所示。
图10.1大根堆建堆过程图
例题4:已知序列{503,87,512,61,908,170,897,275,652,462},采用基数排序法对该序列作升序排序时的每一趟的结果。
解:依题意,采用快速排序法排序的各趟的结果如下
初始:503,87,512,61,908,170,897,275,652,462
第1趟:[462,87,275,61,170 ] 503[897,908,652,512 ]
第2趟:[170,87,275,61 ] 462,503 [897,908,652,512 ]
voiddbubble (sqlistr)
{
inti=1, j , b=1;
structrec t;
while (b)
{
b=0;
for ( j=n-i+1; j>=i+1; j--)
if ( r[j].key<r[j-1].key)
{
b=1;
t=r[j];
r[j]=r[j-1];
r[jБайду номын сангаас1]=t;
}
第3趟(按百为排序):61,87,170,275,462,503,512,652,897,908
例题5:已知序列{10,18,4,3,6,12,1,9,15,8},请给出采用归并排序法对该序列作升序排序时的每一趟的结果。
解:依题意,采用归并排序法排序的各趟的结果如下:
初始:10,18,4,3,6,12,1,9,15,8
例题6:设计一个函数修改冒泡排序过程以实现双向冒泡排序。
解:
冒泡排序是从最下面的记录开始,对每两个相邻的关键字进行比较,且使关键字较小的记录换至关键字较大的记录之上,使得经过一趟冒泡排序后,关键字最小的记录到达最上端,接着,再在剩下的记录中找关键字最小的记录,并把它换在第二位置上。依次类推,一直到所有记录都有许为止。双向冒泡排序则是每一趟通过每两个相邻的关键字进行比较,产生最小和最大的元素。实现双向冒泡排序的函数如下:
合集下载

[新版]什么是内排序

[新版]什么是内排序

第十章综合题1.什么是内排序? 什么是外排序? 什么排序方法是稳定的? 什么排序方法是不稳定的?2.设待排序的关键字序列为(15, 21, 6, 30, 23, 6′, 20, 17), 试分别写出使用以下排序方法每趟排序后的结果。

并说明做了多少次比较。

(1) 直接插入排序(2) 希尔排序(增量为5,2,1) (3) 起泡排序(4) 快速排序(5) 直接选择排序(6) 锦标赛排序(7) 堆排序(8) 二路归并排序(9) 基数排序3.在起泡排序过程中,什么情况下关键字会朝向与排序相反的方向移动,试举例说明。

在快速排序过程中有这种现象吗?4.快速排序在什么情况下所需关键字的比较次数最多?此时关键字比较次数应为多少?5.用直接插入排序方法对序列(94,32,40,90,80,46,21,69)进行排序(由小到大),试写出排序的过程。

6.已知初始序列为(125 ,11, 22, 34, 15, 44, 76, 66, 100, 8 ,14, 20, 2,5, 1),写出采用希尔排序算法排序的每一趟的结果(增量为5,3,1)。

7.写出对初始序列(50,72,43,85,75,20,35,45,65,30)进行直接选择排序的过程。

8.若用冒泡排序对关键字序列(18,16,14,12,10,8),进行从小到大的排序,所需进行的关键字比较次数是多少。

9.给出关键字序列(27,18,21,77,26,45,66,34),试写出快速排序过程。

10.无序序列为(10,2,13,15,12,14),用堆排序方法从小到大排序,画出堆排序的初态、建堆和重建堆的过程。

11.写出对序列(28,16,32,12,60,2,5,72)进行2路归并排序的过程。

12.给出如下关键字序列(321,156,057,046,028,007,331,033,034,063),试按链式基数排序方法,列出每一趟分配和收集的过程。

13.若参加锦标赛排序的关键字有11个,为了完成排序,至少需要多少次关键字比较?14.手工跟踪对以下各序列进行堆排序的过程。

第十章内部排序

第十章内部排序

10.2 插入排序
1、直接插入排序:续 •实现算法
Status InsertSort ( SqList &L ) { for ( i = 2; i <= L.length ; ++i ) if ( LT( L.r[i].key, L.r[i-1].key ) ) { L.r[0].key = L.r[i].key; //复制为哨兵 for ( j=i-1; LT( L.r[0].key, L.r[j].key ) ; - -j ) L.r[j+1] = L.r[j]; //后移记录 L.r[j+1] = L.r[0]; } } //InsertSort
1 物料管理
第十章 内部排序
学习内容
10.1 概述 10.2 插入排序 10.3 快速排序 10.4 选择排序 10.5 归并排序
SORT
2 物料管理
第十章 内部排序
10.1 概述
•定义
设有记录序列:{ R1、R2 ……….. Rn } 其相应的关键字序列为: { K1、K2 ……….. Kn }; 若存在一种确定的关系: Kx <= Ky <= … <= Kz,则将记录序列 { R1、R2 ……….. Rn } 排成按 该关键字有序的序列:{ Rx、Ry ……….. Rz } 的操作,称之为排序。
•性能分析 减少了查找比较次数,但并未降低时间复杂度,仍为O(n2)。 7
SORT
8 物料管理
第十章 内部排序
10.2 插入排序
3、 希尔(shell) 排序 •基本思想 先将整个待排记录序列分割成为若干个子序列分别进行直接插入排序,待整个序列 中的记录基本有序时,再对全体记录进行一次直接插入排序。

数据结构答案第10章排序学习与指导 (1)

数据结构答案第10章排序学习与指导 (1)

第10章排序10.1 知识点分析1.排序基本概念:(1)排序将数据元素的任意序列,重新排列成一个按关键字有序(递增或递减)的序列的过程称为排序。

(2)排序方法的稳定和不稳定若对任意的数据元素序列,使用某个排序方法,对它按关键字进行排序,若对原先具有相同键值元素间的位置关系,排序前与排序后保持一致,称此排序方法是稳定的;反之,则称为不稳定的。

(3)内排序整个排序过程都在内存进行的排序称为内排序,本书仅讨论内排序。

(4)外排序待排序的数据元素量大,以致内存一次不能容纳全部记录,在排序过程中需要对外存进行访问的排序称为外排序。

2.直接插入排序直接插入排序法是将一个记录插到已排序好的有序表中,从而得到一个新的,记录数增1的有序表。

3.二分插入排序二分插入排序法是用二分查找法在有序表中找到正确的插入位置,然后移动记录,空出插入位置,再进行插入的排序方法。

4.希尔排序希尔排序的基本思想是:先选取一个小于n的整数d1作为第一个增量,把待排序的数据分成d1个组,所有距离为d1的倍数的记录放在同一个组内,在各组内进行直接插入排序,每一趟排序会使数据更接近于有序。

然后,取第二个增量d2,d2< d1,重复进行上述分组和排序,直至所取的增量d i=1(其中d i< d i-1 < ……< d2< d1),即所有记录在同一组进行直接插入排序后为止。

5.冒泡排序冒泡法是指每相邻两个记录关键字比大小,大的记录往下沉(也可以小的往上浮)。

每一遍把最后一个下沉的位置记下,下一遍只需检查比较到此为止;到所有记录都不发生下沉时,整个过程结束。

6.快速排序快速排序法是通过一趟排序,将待排序的记录组分割成独立的两部分,其中前一部分记录的关键字均比枢轴记录的关键字小;后一部分记录的关键字均比枢轴记录的关键字大,枢轴记录得到了它在整个序列中的最终位置并被存放好。

第二趟再分别对分割成两部分子序列,再进行快速排序,这两部分子序列中的枢轴记录也得到了最终在序列中的位置而被存放好,并且它们又分别分割出独立的两个子序列……。

第十章排序

第十章排序

关键字比较次数:
n
1

n
1
i2
记录移动次数:
n

2

2(n
1)
i2
» 若待排序记录按关键字从大到小排列(逆序)
n
关键字)
i2
2
n
记录移动次数:
(i 1) (n 4)(n 1)
i2
2
» 若待排序记录是随机的,取平均值
while (i<j&&r[j]>=x) j--; t=r[i]; r[i]=r[j]; r[j]=t; while (i<j&&r[i]<=x) i++; t=r[i]; r[i]=r[j]; r[j]=t; } r[i]=x; QkSort(r,low,i-1); QkSort(r,i+1,hig); }
对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的记 录被安置在第n-1个记录位置 重复上述过程,直到“在一趟排序过程中没有进行过交换记 录的操作”为止
...
例,序列 49 38 76 13 27
4398
38
1338
13
3489 初
1439
321873
27
始
7163
421973
3287
第 四
思想:
先将待排序记录序列分割成为若干子序列分别进行直接插入排序;
待整个序列中的记录基本有序后,再全体进行一次直接插入排序。
例,序列 49 38 65 97 76 13 27 48 55 4 19
第一趟排序 49
13
19
取d1=5
38

第十章排序(可编辑修改word版)

第十章排序(可编辑修改word版)
主要辅助手段:多媒体
作业布置
10-4(2),(4),(5),10-6,
主 要 参考资料
1.《数据结构》,严蔚敏 吴伟民,清华大学出版社;2.数据结构题集(C语言版),
严蔚敏 吴伟民,清华大学出版社;
备注
重点难点
希尔的思想,实现,算法分析
要求掌握知识点和
分析方法
1.概念:排序,主(次)关键字,内部(外部)排序,比较排序算法的技术指标2。插入排序的基本思想;3。直接直接插入排序和希尔的思想,实现,算法分析。
教授思路,采 用 的 教学方法和辅助手段,板书设计,重 点 如 何突出,难点如何解决,师 生 互 动等
难点:堆的调整辅助手段:多媒体
作业布置
10-7,10-8
主 要 参考资料
1.《数据结构》,严蔚敏 吴伟民,清华大学出版社;2.数据结构题集(C语言版),
严蔚敏 吴伟民,清华大学出版社;
备注
章节
10.5归并排序10.6基数排序
讲授主要内容
归并排序 ,基数排序
重点难点
归并排序 ,基数排序的基本思想与算法实现
本章思考题和习题
主 要 参考资料
1.《数据结构》,严蔚敏 吴伟民,清华大学出版社;2.数据结构题集(C语言版),
严蔚敏 吴伟民,清华大学出版社;
备注
章节
10.1概念10.2插入排序
讲授主要内容
1.概念:排序,主(次)关键字,内部(外部)排序,比较排序算法的技术指标2.
插入排序的基本思想;3。直接直接插入排序和希尔的思想,实现,算法分析。
教授思路,采 用 的 教学方法和辅助手段, 板书设计,重 点 如 何突出,难点如何解决,师 生 互 动等
教学思路:

第10章 排序

第10章  排序

第十章排序一、单项选择题1.有一组序列48,36,68,99,75,24,58,52进行快速排序,要求结果按从小到大排序,则进行一次划分之后结果为_____。

A. (24 28 36) 48 (52 68 75 99)B. (28 36 24) 48 (75 99 68 52)C. (36 68 99) 48 (75 24 28 52)D. (28 36 24) 48 (99 75 68 52)2.已知两个有序表,若要将它们组合成一个新的有序表,最好的方法是_____。

A. 希尔排序B. 二分插入排序C. 合并排序D. 冒泡排序3.排序译意风稳定的和不稳定的之分,下列四个说法中,只有______是正确的。

A. 快速排序是稳定的排序方法B. 堆排序是不稳定的排序方法C. 希尔排序是稳定的排序方法D. 冒泡排序是不稳定的排序方法4. 下列排序方法中,____方法是不稳定的。

A. 冒泡排序B. 希尔排序C. 冒泡排序D. 直接插入排序5. 下列排序方法中,在待排序的数据已经有序时,花费时间反而最多的是______。

A.快速排序B. 希尔排序C. 冒泡排序D. 堆排序6. 快速排序方法在最好情况下的时间复杂度为______。

A. O(n)B. O(n2)C. O(nlog2n)D.(log2n)7. 下列排序方法中,时间复杂度不受数据初始状态影响,恒为O(n2)的是_______。

A. 堆排序B.冒泡排序C. 直接选择排序D.快速排序8. 依次将待排序序列中的元素和有序子序列合并为一个新的有序子序列的排序方法是____。

A. 快速排序B.插入排序C. 冒泡排序D. 堆排序9. 在表R中排序前已按键值递增顺序排序,则_____方法的比较次数最少。

A. 直接插入排序B. 快速排序C. 归并排序D. 选择排序10. 已知表A中每个元素距其最终位置不远,采用______方法最节省时间。

A. 堆排序B. 冒泡排序C. 快速排序D. 直接选择排序11. 在下列排序方法中,字比较的次数与记录的初始排列次序无关的是______。

数据结构题——精选推荐

数据结构题第六章树和⼆叉树简答题1、有⼀棵树的括号表⽰为A(B,C(E,F(G)),D),回答下⾯的问题:这棵树的根结点是谁?这棵树的叶⼦结点是什么?结点C的度是多少?这棵树的度是多少?这棵树的深度是多少?结点C的孩⼦结点是哪些?结点C的双亲结点是谁?2、若⼀棵度为4的树中度为1,2,3,4的结点个数分别是4,3,2,2,则该树中叶⼦结点的个数是多少?总结点个数是多少?3、⼀棵⾼度为h的完全k次数,如果按照层次⾃上向下、⾃左向右的顺序从1开始对全部结点编号,试问:最多有多少个结点?最少有多少个结点?编号为q的结点的第i个孩⼦结点的编号是多少?4、若⼀棵⼆叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数为结点的总个数为5、⼀棵完全⼆叉树有1001个结点,其中叶⼦结点的个数为6、⼀棵⾼度为h的完全⼆叉树⾄少有个结点。

7、⼀棵⾼度为5的完全⼆叉树⾄多有个结点。

8、设⾼度为h的⼆叉树上只有度为0和度为2的结点,则此类⼆叉树⾄少包含个结点。

9、⼀个具有1025个结点的⼆叉树的⾼度h为10、在⼀棵完全⼆叉树中,结点个数为n,则编号最⼤的分⽀结点的编号为11、⼀棵⼆叉树的先序遍历为ABCDEF,中序遍历为CBAEDF,则后序遍历为12、⼀棵⼆叉树的先序遍历为ABCDEFG,它的中序遍历可能为A.CABDEFGB. ABCDEFGC.DACEFBGD.ADCFEGB思考:⼆叉树的先序和中序遍历相同的条件是?⼆叉树的后序和中序遍历相同的条件是?13、⼀棵⼆叉树的后序遍历为DABEC,中序遍历为DEBAC,则先序遍历为14、⼀棵⼆叉树的先序遍历为EFHIGJK,中序遍历为HFIEJKG,则该⼆叉树根结点的右孩⼦为16、根据使⽤频率为5个字符设计的赫夫曼编码不可能的是A.111,110,10,01,00B.000,001,010,011,1C.100,11,10,1,0D.001,000,01,11,1017、根据使⽤频率为5个字符设计的赫夫曼编码不可能的是A. 000,001,010,011,1B.0000,0001,001,01,1C. 000,001,01,10,11D.00,100,101,110,11118、设有13个值,⽤它们组成⼀棵赫夫曼树,则该赫夫曼树共有个结点。

数据结构第10章排序练习及答案

9.1选择题1.从末排序的序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在排序序列的合适位置,该排序方法称为()排序法。

A)插入B)选择C)希尔D)二路归并【答案】A2.下面各种排序方法中,最好情况下时间复杂度为O(n)的是()A)快速排序B)直接插入排序C)堆排序D)归并排序【答案】B3.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,无序序列的变化情况如下:25 84 21 47 15 27 68 35 2020 15 21 25 47 27 68 35 8415 20 21 25 35 27 47 68 8415 20 21 25 27 35 47 68 84则所采用的排序方法是()A)选择排序B)希尔排序C)归并排序D)快速排序【答案】D4.下面给出的四种排序法中,()排序是不稳定排序法。

A)插入B)冒泡C)二路归并D)堆【答案】D5.快速排序方法在()情况下最不利于发挥其长处。

A)要排序的数据量太大B)要排序的数据中含有多个相同值C)要排序的数据已基本有序D)要排序的数据个数为奇数【答案】C6.一组记录的关键码为(46,79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为()A)38,40,46,56,79,84B)40,38,46,79,56,84C)40,38,46,56,79,84D)40,38,46,84,56,79【答案】C7.对记录的关键码{50,26,38,80,70,90,8,30,40,20}进行排序,各趟排序结束时的结果为:50,26,38,80,70,90 ,8,30,40,2050,8,30,40,20,90,26,38,80,7026,8,30,40,20,80,50,38,90,708,20,26,30,38,40,50,70,80,90其使用的排序方法是()A)快速排序B)基数排序C)希尔排序D)归并排序【答案】C8.以下序列不是堆的是()A)100,85,98,77,80,60,82,40,20,10,66B)100,98,85,82,80,77,66,60,40,20,10C)10,20,40,60,66,77,80,82,85,98,100D)100,85,40,77,80,60,66,98,82,10,20【答案】D【解析】根据堆采用完全二叉树的顺序存储形式及堆的特点,因第一个结点即根结点关键字值最大,则应建立一个大根堆,但依据此数据序列建立起堆后关键字值为40的左右孩子结点分别为60、66,不符合大根堆特点。

(严蔚敏)第10章 内部排序 习题答案


参考程序为: 参考程序为: #include <iostream> using namespace std; //直接插入排序法 直接插入排序法 void InsertSort ( int r[ ], int n ) { for ( int i=2; i<=n; i++ ) if (r[i] < r[i-1]) { r[0] = r[i]; // 复制为监视哨 for ( int j = i-1 ; r[0] < r[j]; j-- ) r[j+1] = r[j]; // 记录后移 r[j+1] = r[0]; // 插入到正确位置 } }
第10章 内部排序 章 习题及答案
一、单项选择题 ( C ) 1. 一组记录的关键码为 ( 46, 79, 56, 38, 40, 84 ) 利用快速排序方法, 利用快速排序方法,以第一个记录为基准 得到的一次划分结果为。 得到的一次划分结果为。 A. 38, 40, 46, 56, 79, 84 B. 40, 38, 46, 79, 56, 84 C. 40, 38, 46, 56, 79, 84 D. 40, 38, 46, 84, 56, 79
(1)直接插入排序 ) 1 2 3 初始 [83] 40 63 i=2 [40 83] i=3 [40 63 83] i=4 [13 40 63 i=5 [13 40 63 i=6 [13 35 40 i=7 [13 35 40 i=8 [13 35 40
4 13
5 84
6 35
7 96
8 57
83] 83 63 63 57
三、应用题 1. 已知关键码序列 (83, 40, 63, 13, 84, 35, 96, 57) ) 分别画出用直接插入排序、简单选择排序、 分别画出用直接插入排序、简单选择排序、 直接插入排序 快速排序对上述序列进行操作的各趟结果。 快速排序对上述序列进行操作的各趟结果。 对上述序列进行操作的各趟结果

数据结构Ch10习题答案

第十章内部排序一、择题1.用直接插入排序法对下面四个表进行(由小到大)排序,比较次数最少的是(B)。

A.(94,32,40,90,80,46,21,69)插32,比2次插40,比2次插90,比2次插80,比3次插46,比4次插21,比7次插69,比4次B.(21,32,46,40,80,69,90,94)插32,比1次插46,比1次插40,比2次插80,比1次插69,比2次插90,比1次插94,比1次C.(32,40,21,46,69,94,90,80)插40,比1次插21,比3次插46,比1次插69,比1次插94,比1次插90,比2次插80,比3次D.(90,69,80,46,21,32,94,40)插69,比2次插80,比2次插46,比4次插21,比5次插32,比5次插94,比1次插40,比6次2.下列排序方法中,哪一个是稳定的排序方法(BD)。

A.希尔排序B.直接选择排序C.堆排序D.冒泡排序下列3题基于如下代码:for(i=2;i<=n;i++){ x=A[i];j=i-1;while(j>0&&A[j]>x){ A[j+1]=A[j];j--;}A[j+1]=x}3.这一段代码所描述的排序方法称作(A)。

A.插入排序B.冒泡排序C.选择排序D.快速排序4.这一段代码所描述的排序方法的平均执行时间为(D)A.O(log2n) B.O(n) C.O(nlog2n) D.O(n2)5.假设这段代码开始执行时,数组A中的元素已经按值的递增次序排好了序,则这段代码的执行时间为(B)。

A.O(log2n) B.O(n) C.O(nlog2n) D.O(n2)6.在快速排序过程中,每次被划分的表(或了表)分成左、右两个子表,考虑这两个子表,下列结论一定正确是(B)。

A.左、右两个子表都已各自排好序B.左边子表中的元素都不大于右边子表中的元素C.左边子表的长度小于右边子表的长度D.左、右两个子表中元素的平均值相等7.对n个记录进行堆排序,最坏情况下的执行时间为(C)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档