第九章 排序
数据结构第九章排序习题与答案
习题九排序一、单项选择题1.下列内部排序算法中:A.快速排序 B.直接插入排序C. 二路归并排序D.简单选择排序E. 起泡排序F.堆排序(1)其比较次数与序列初态无关的算法是()(2)不稳定的排序算法是()(3)在初始序列已基本有序(除去n 个元素中的某 k 个元素后即呈有序, k<<n)的情况下,排序效率最高的算法是()(4)排序的平均时间复杂度为O(n?logn)的算法是()为 O(n?n) 的算法是()2.比较次数与排序的初始状态无关的排序方法是( )。
A.直接插入排序B.起泡排序C.快速排序D.简单选择排序3.对一组数据( 84, 47, 25, 15, 21)排序,数据的排列次序在排序的过程中的变化为(1) 84 47 25 15 21(2) 15 47 25 84 21(3) 15 21 25 84 47(4) 15 21 25 47 84则采用的排序是 ()。
A. 选择B.冒泡C.快速D.插入4.下列排序算法中 ( )排序在一趟结束后不一定能选出一个元素放在其最终位置上。
A. 选择B.冒泡C.归并D.堆5.一组记录的关键码为(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)6.下列排序算法中,在待排序数据已有序时,花费时间反而最多的是()排序。
A.冒泡 B. 希尔C. 快速D. 堆7.就平均性能而言,目前最好的内排序方法是() 排序法。
A. 冒泡B.希尔插入C.交换D.快速8.下列排序算法中,占用辅助空间最多的是:()A. 归并排序B.快速排序C.希尔排序D.堆排序9.若用冒泡排序方法对序列 {10,14,26,29,41,52}从大到小排序,需进行()次比较。
计算机专业数据结构第九章测试
数据结构测试(长春理工大学精品课)第9章排序一、选择题1.某内排序方法的稳定性是指( )。
查看答案A.该排序算法不允许有相同的关键字记录B.该排序算法允许有相同的关键字记录C.平均时间为0(n log n)的排序方法D.以上都不对正确答案是D解释:稳定的排序方法指的是若有相同关键字的记录,待排序时在前面的记录排序后仍然排在前面的排序方法。
收起2.下面给出的四种排序法中( )排序法是不稳定性排序法。
查看答案A. 插入B. 冒泡C. 二路归并D. 堆正确答案是D解释:堆排序是不稳定的,交换时有可能把后面的排在前面。
收起3.下面给出的四种排序方法中,排序过程中的比较次数与排序方法无关的是。
( )查看答案A.选择排序法 B. 插入排序法 C. 快速排序法 D. 堆排序法正确答案是A解释:简单选择排序是在待排记录中找到最小的和第一个相交换,再在除了第一个排完的以外找个最小的和第二个相交换,依此类推,n个记录的待排序列需要比较(n-1)+(n-2)+......+0=(n-1)*n/2收起4. 对序列{15,9,7,8,20,-1,4,} 用希尔排序方法排序,经一趟后序列变为{15,-l,4,8,20,9,7}则该次采用的增量是查看答案( )A. lB. 4C. 3D. 2正确答案是B 收起5.下列四个序列中,哪一个是堆()。
查看答案A. 75,65,30,15,25,45,20,10B. 75,65,45,10,30,25,20,15C. 75,45,65,30,15,25,20,10D. 75,45,65,10,25,30,20,15正确答案是C解释:这是一个大根堆,每个结点都比左右孩子小。
收起6.对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1)84 47 25 15 21 (2)15 47 25 84 21 (3)15 21 25 84 47(4)15 21 25 47 84则采用的排序是( )。
数据结构第9章 排序
R[3] 10
R[4] 60
R[5] 25
R[6] 30
R[7] 18 18 18 18
18 36 20
10 10 36
60 60 60
25 25 25
30 30 30
【算法】直接插入排序 void D_InsertSort(datatype R[ ], int n) { /*对排序表R[1]..R[n]进行直接插入排序,n是记录的 个数*/ for(i=2; i<=n; i++) if (R[i].key<R[i-1].key) {R[0]=R[i]; /*将R[i]插入R[1].. R[i-1]中, R[0]为监测哨*/ for(j=i-1; R[0].key<R[j].key; j--) R[j+1]=R[j]; /*后移记录*/ R[j+1]=R[0]; /*插入到合适位置*/ } }
空间性能:除排序表以外的内存占用情况。 时间性能:比较关键码的次数,数据移动的次数。 它们往往是排序表规模(n)的函数
6. 记录和排序表的数据结构
一般采用顺序结构存储排序表。 记录和排序表的类型定义如下: #define MAXNUM … /* MAXNUM 为足够大的数 typedef struct { keytype key; …… } datatype; datatype R[MAXNUM]; /*关键码字段*/ /*其它信息*/ /*记录类型*/ /*定义排序表的存储
第一趟排序结果,使得间隔为5的字表有序: P=3
29 7 41 30 11 39 50 76 41 13 10 0 80 78 86
子序列分别为:{29,30,50,13,78},{7,11,76,100,86}, {41,39,41,80}。第二趟排序结果: P=1
数据结构第9章 排序
数据结构第9章排序数据结构第9章排序第9章排名本章主要内容:1、插入类排序算法2、交换类排序算法3、选择类排序算法4、归并类排序算法5、基数类排序算法本章重点难点1、希尔排序2、快速排序3、堆排序4.合并排序9.1基本概念1.关键字可以标识数据元素的数据项。
如果一个数据项可以唯一地标识一个数据元素,那么它被称为主关键字;否则,它被称为次要关键字。
2.排序是把一组无序地数据元素按照关键字值递增(或递减)地重新排列。
如果排序依据的是主关键字,排序的结果将是唯一的。
3.排序算法的稳定性如果要排序的记录序列中多个数据元素的关键字值相同,且排序后这些数据元素的相对顺序保持不变,则称排序算法稳定,否则称为不稳定。
4.内部排序与外部排序根据在排序过程中待排序的所有数据元素是否全部被放置在内存中,可将排序方法分为内部排序和外部排序两大类。
内部排序是指在排序的整个过程中,待排序的所有数据元素全部被放置在内存中;外部排序是指由于待排序的数据元素个数太多,不能同时放置在内存,而需要将一部分数据元素放在内存中,另一部分放在外围设备上。
整个排序过程需要在内存和外存之间进行多次数据交换才能得到排序结果。
本章仅讨论常用的内部排序方法。
5.排序的基本方法内部排序主要有5种方法:插入、交换、选择、归并和基数。
6.排序算法的效率评估排序算法的效率主要有两点:第一,在一定数据量的情况下,算法执行所消耗的平均时间。
对于排序操作,时间主要用于关键字之间的比较和数据元素的移动。
因此,我们可以认为一个有效的排序算法应该是尽可能少的比较和数据元素移动;第二个是执行算法所需的辅助存储空间。
辅助存储空间是指在一定数据量的情况下,除了要排序的数据元素所占用的存储空间外,执行算法所需的存储空间。
理想的空间效率是,算法执行期间所需的辅助空间与要排序的数据量无关。
7.待排序记录序列的存储结构待排序记录序列可以用顺序存储结构和和链式存储结构表示。
在本章的讨论中(除基数排序外),我们将待排序的记录序列用顺序存储结构表示,即用一维数组实现。
北京师范大学数据结构教学资料第九章排序
第九章排序(基础知识)8.1 【答案】以关键字序列(265,301,751,129,937,863,742,694,076,438)为例,分别写出执行以下排序算法的各趟排序结束时,关键字序列的状态。
(1) 直接插入排序(2)希尔排序(3)冒泡排序(4)快速排序(5) 直接选择排序(6) 堆排序(7) 归并排序(8)基数排序上述方法中,哪些是稳定的排序?哪些是非稳定的排序?对不稳定的排序试举出一个不稳定的实例。
8.2 【答案】上题的排序方法中,哪些易于在链表(包括各种单、双、循环链表)上实现?8.3 【答案】当R[low..high]中的关键字均相同时,Partion返回值是什么?此时快速排序的的运行时间是多少?能否修改Partion,使得划分结果是平衡的(即划分后左右区间的长度大致相等)?8.4 【答案】若文件初态是反序的,则直接插入,直接选择和冒泡排序哪一个更好?8.5 【答案】若文件初态是反序的,且要求输入稳定,则在直接插入、直接选择、冒泡和快速排序中就选选哪种方法为宜?6. 用快速排序算法,对下列数组排序60 56 65 99 22 16 88 100a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]取a[0]为支点(pivot),列出第一轮升序排序后的元素顺序。
8.6 【答案】有序数组是堆吗?8.7 【答案】高度为h的堆中,最多有多少个元素?最少有多少个元素?在大根堆中,关键字最小的元素可能存放在堆的哪些地方?8.8 【答案】判别下列序列是否为堆(小根堆或大根堆),若不是,则将其调整为堆:(1) (100,86,73,35,39,42,57,66,21);(2) (12,70,33,65,24,56,48,92,86,33);(3) (103,97,56,38,66,23,42,12,30,52,06,20);(4) (05,56,20,23,40,38,29,61,35,76,28,100).8.9 【答案】将两个长度为n的有序表归并为一个长度为2n的有序表,最小需要比较n次,最多需要比较2n-1次,请说明这两种情况发生时,两个被归并的表有何特征?7. 将序列101 45 21 532 22 5 232 14 存放在一静态链表中(见下图),并对其按照链式基数排序法进行升序排序。
天狼50灵动版用户使用手册第九章 排序表
6
选中集合
板块列表 运算方式
2、基本操作
板块运算的基本步骤如下:首先用户在第二列选择需要计算的 A 或 B 集合,之后从板块列表中勾选需要 的一个或多个板块,其包含的股票会显示在该集合中。A、B 集合都填好后,在第三列中选择用户需要的运算 方式。计算完毕的股票集合将显示在最右列中。如果对计算完的股票集合仍需要进行运算,可以点击第三列的 上下回传按钮将结果传入 A 集合或 B 集合。完成所有计算后,点击保存可以对新板块进行命名操作并完成新 建板块的操作。 1. 选 中 集 合 2. 勾选板 块
2
指标名称
添加指标 按钮
9.3 板块的操作
天狼 50 灵动版默认显示 3 个板块,分别为【沪深 A 股】,【深证 A 股】和【上证 A 股】。板块标签显 示在页面下方,从左到右排列。添加板块按钮是位于页面下方右侧的带加号的圆形按钮,点击后用户可以根据 相应的选项选择需要显示的板块。点击板块标签上的红叉按钮可以关闭该板块。
5
板块运算 按钮
1、窗口布局
板块运算的左一列是板块列表, 其中包含天狼 50 灵动版提供的各个市场板块以及自定义板块。 左二列是 A、 B 子集合,点击 A 集合后,用户选择的板块将显示在 A 中,点击 B 集合股票则显示在 B 中。第三列是运算方 式的选择,图中绿色的部分是计算后得到的结果部分。最右列显示运算完毕后的股票列表。 保存按钮位于右下方,点可以 在板块列表中选中该板块,并在窗口中左下方点击相应按钮即可。需要说明的是,天狼 50 灵动版提供的系统 默认版块不能进行删除或重命名操作。
第 9 章 排序表
9.1 基本操作
排序表是帮助用户进行选股操作的重要功能,其收放按钮位于左翻页钮上方,在代码表收放按钮的下方。 排序表展开后将覆盖整个页面。点击页面右下角的日期即可进行交易日的切换。在排序表中,用户可以根据自 己的需要,通过不同指标的排序以及板块间的运算操作,找到自己关注的股票。
数据结构习题及答案(3)
数据结构习题及答案(3)第九章排序⼀、选择题1.在所有排序⽅法中,关键字⽐较的次数与记录得初始排列次序⽆关的是()(A)希尔排序(B)起泡排序(C)插⼊排序(D)选择排序参考答案:D2.设有1000个⽆序的元素,希望⽤最快的速度挑选出其中前10个最⼤的元素,最好()排序法。
(A)起泡排序(B)快速排序(C)堆排序(D)基数排序参考答案:C3.在待排序的元素序列基本有序的前提下,效率最⾼的排序⽅法是()(A)插⼊排序(B)选择排序(C)快速排序(D)归并排序参考答案:A4.⼀组记录的排序码为(46,79,56,38,40,84),则利⽤堆排序的⽅法建⽴的初始推为()。
(A)79,46,56,38,40,80 (B)84,79,56,38,40,46(C)84,79,56,46,40,38 (D)84,56,79,40,46,38参考答案:B5.⼀组记录的关键码为(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参考答案:C6.⼀组记录的排序码为(25,48,16,35,79,82,23,40,36,72),其中含有5个长度为2的有序表,按归并排序的⽅法对该序列进⾏⼀趟归并后的结果为()。
(A)16,25,35,48,23,40,79,82,36,72(B)16,25,35,48,79,82,23,36,40,72(C)16,25,48,35,79,82,23,36,40,72(D)16,25,35,48,79,23,36,40,72,82参考答案:A7.排序⽅法中,从未排序序列中依次取出元素与⼰排序序列(初始时为空)中的元素进⾏⽐较,将其放⼊⼰排序序列的正确位置上的⽅法,称为()(A)希尔排序(B)起泡排序(C)插⼊排序(D)选择排序参考答案:C8.排序⽅法中,从未排序序列中挑选元素并将其依次放⼊⼰排序序列(初始为空)的⼀端的⽅法,称为()(A)希尔排序(B)归并排序(C)插⼊排序(D)选择排序参考答案:D9.⽤某种排序⽅法对线性表(25,84,21,47,15,27,68,35,20)进⾏排序时,元素序列的变化情况如下:(1)25,84,21,47,15,27,68,35,20 (2)20,15,21,25,47,27,68,35,84(3)15,20,21,25,35,27,47,68,84 (4)15,20,21,25,27,35,47,68,845则所采⽤的排序⽅法是()。
第9章排序(下)-数据结构简明教程(第2版)-微课版-李春葆-清华大学出版社
外
排
5(-∞)
17
5
10
序
F0
F1
F2
F3 29 F4 15
每个叶子结点对应一个归并段,段号为0~4。 初始时每个分支结点(含冠军结点)取值“5(- ∞)”,5表示段 号(此时为虚拟段号),- ∞表示最小关键字。例如,某结点取值 为“4(15)”,表示结点值来自4号段的关键字15对应的记录。
15(5-)∞) 冠军(最小者)
9.7
1. k路平衡归并的效率分析
k=2时,采用平衡归并时,如果初始归并段有m个,那么这样的归
并树就有log2m+1层。
外 排
要对数据进行log2m趟扫描。
序
说明:如果所有初始归并段的长度(初始归并段中的记录个
数)相等或大致相等,可采用k路平衡归并。
9.7
例如:二路平衡归并 初始序列:(5,4,1,6,8,3,2,7)
9.7
若有m个初始归并段,共u个记录 归并趟数=logkm k越大,WPL越少,则读写记录的次数越少。
外
排
在内存空间允许的情况下,k越大越好!
序
9.7
k路平衡归并的关键字比较时间分析:
若在归并中采用简单选择方法,每次在k个记录中选择最 小者,需要关键字比较k-1次。
每 趟 归 并 u 个 记 录 需 要 做 (u-1)*(k-1) 次 比 较 , s= logkm)趟归并总共需要的关键字比较次数为:
某种内排序方法
外
排
文件Fin.dat
容量为750个记录
序
(含4500个记录)
产生6个长度为 750个记录的有序 文件F1~F6。
第一阶段
第二阶段:归并过程
《数据结构》习题汇编09-第九章-排序-试题
《数据结构》习题汇编09-第九章-排序-试题数据结构课程(本科)第九章试题一、单项选择题1.若待排序对象序列在排序前已按其排序码递增顺序排列,则采用()方法比较次数最少。
A. 直接插入排序B. 快速排序C. 归并排序D. 直接选择排序2.如果只想得到1024个元素组成的序列中的前5个最小元素,那么用()方法最快。
A. 起泡排序B. 快速排序C. 直接选择排序D. 堆排序3.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。
这样的排序方法是()。
A. 直接选择排序B. 直接插入排序C. 快速排序D. 起泡排序4.对5个不同的数据元素进行直接插入排序,最多需要进行()次比较?A. 8B. 10C. 15D. 255.如果输入序列是已经排好顺序的,则下列算法中()算法最快结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序6.如果输入序列是已经排好顺序的,则下列算法中()算法最慢结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序7.下列排序算法中()算法是不稳定的。
A. 起泡排序B. 直接插入排序C. 基数排序D. 快速排序8.假设某文件经过内部排序得到100个初始归并段,那么如果要求利用多路平衡归并在3 趟内完成排序,则应取的归并路数至少是()。
A. 3B. 4C. 5D. 69.采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要()次比较。
A. 5B. 6C. 7D. 810.下列算法中()算法不具有这样的特性:对某些输入序列,可能不需要移动数据对象即可完成排序。
A. 起泡排序B. 希尔排序C. 快速排序D. 直接选择排序11.使用递归的归并排序算法时,为了保证排序过程的时间复杂度不超过O(nlog2n),必须做到()。
A. 每次序列的划分应该在线性时间内完成B. 每次归并的两个子序列长度接近C. 每次归并在线性时间内完成D. 以上全是12.在基于排序码比较的排序算法中,()算法的最坏情况下的时间复杂度不高于O(nlog2n)。
第9章_排序
比较次数的最大值 (n i) n(n 1) / 2 O(n2 ) i 1
n1
移动次数的最大值 3(n i) 3n(n 1) / 2 O(n2 ) i 1
冒泡排序方法是稳定的。
9.3.2 快速排序
快速排序的基本思想
快速排序方法是一种所需比较次数较少、在 内部排序中速度比较快的排序方法。
其思想是在待排序的记录序列中任取某个记 录(作为基准)的值作为控制值,采用某种 方法把这个记录放到适当的位置,使得这个 位置的左边的所有记录的值都小于或等于这 个控制值,而这个位置的右边的所有记录的 值都大于或等于这个控制值。
例9.4 (a) 一趟快速排序示例(一次划分过程)
49 38 65 97 76 13 27 49’
排序 所谓排序(Sort),就是要整理文件中的 记录,使它们按关键字递增(或递减)次序重新排 列。排序的确切定义为: 假设文件中有n个记录R1,R2,…Rn,其相应的 关键字分别为K1,K2,…Kn。所谓排序,是需要将 这Ki1n≤个Ki记2≤录…重≤K新in(排或列Ki为1 ≥RKi1i2,R≥i…2,…≥RKiinn,)使。得
例9.1 直接插入排序举例
[初始关键字]
i=2 (38) i=3 (65) i=4 (97) i=5 (76) i=6 (13) i=7 (27) i=8 (49)
监视哨R[0]
[49] 38 65 97 76 13 27 49
[38 49] 65 97 76 13 27 49 [38 49 65] 97 76 13 27 49 [38 49 65 97] 76 13 27 49 [38 49 65 76 97] 13 27 49 [13 38 49 65 76 97] 27 49 [13 27 38 49 65 76 97] 49 [13 27 38 49 49 65 76 97]
第九章排序习题 九
第九章排序习题九一、填空题1.每次从无序表中取出一个元素,把它插入到有序表中的适当位置,此种排序方法叫做插入排序;每次从无序表中挑选出一个最小或最大元素,把它交换到有序表的一端,此种排序方法叫做选择排序。
2每次直接或通过基准元素间接比较两个元素,若出现逆序排列时就交换它们的位置,此种排序方法叫做交换排序,每次使两个相邻的有序表合并成一个有序表的排序方法叫做二路归并排序。
3在直接选择排序中,记录比较次数的时间复杂度为O(n2),记录移动次数的时间复杂度为O(n) 。
4在堆排序的过程中,对n个记录建立初始堆需要进行[n/2]次筛运算,由初始堆到堆排序结束,需要对树根结点进行n-1次筛运算。
5在堆排序过程中,对任一分支结点进行筛运算的时间复杂度为O(log2n),整个堆排序过程的时间复杂度为O(nlog2n)。
6假定一组的记录的排序码为(46,79,56,38,40,84),则利用堆排序方法建立的初始堆为(84,79,56,38,40,46)。
7快速排序在平均情况下的时间复杂度为O(nlog2n),在最坏情况下的时间复杂度为O(n2)。
8快速排序在平均情况下的空间复杂度为O(log2n),在最坏情况下的空间复杂度为O(n) 。
9在快速排序方法中,进行每次划分时,是从当前待排序空间的两端向中间依次查找出处于逆序的元素并交换之,最后将基准元素交换到一个确定位置,从而以该位置把当前区间划分为前后两个子区间。
10假定一组记录的排序码为(46,79,56,38,40,80),对其进行快速排序的一次划分的结果为[38 40]46[5679 84]。
11假定一组记录的排序码为(46,79,56,38,40,80),对其进行快速排序过程中,对应二叉树的深度为4 ,分支点结点数为4 。
12在二路归并排中,对n个记录进行归并的趟数为[log2n] 。
13在归并排序中,进行每趟归并的时间复杂度为O(n),整个排序过程的时间复杂度为O(nlog2n),空间复杂度为O(n) 。
第9章排序(上)-数据结构简明教程(第2版)-微课版-李春葆-清华大学出版社
9.1
1. 什么是排序
所谓排序,是要整理表中的记录,使之按关键字递增(递减)
排 有序排列。其确切定义如下:
序 的 基
输 入 : n 个 记 录 , R0,R1,…,Rn-1, 其 相 应 的 关 键 字 分 别 为 k0,k1,…,kn-1。
序
} while (j>=0 && R[j].key>tmp.key);
R[j+1]=tmp;
//在j+1处插入R[i]
} } }
直接插入排序算法分析:
9.2
最好的情况(关键字在记录序列中顺序有序):
“比较”的次数:
n1
1 n 1
i 1
“移动”的次数: 0
插 最坏的情况(关键字在记录序列中逆序有序):
……
R[n-1]
入
排
一趟排序
序
R[0] ……
R[i-1] R[i] R[i+1] …… R[n-1]
有序区
无序区
初始时,有序区只有一个元素R[0] i=1~n-1,共经过n-1趟排序
【例9.1】 已知有10个待排序的记录,它们的关键字序列为
(75,87,68,92,88,61,77,96, 80,72),给出用直接插入排序法进 行排序的过程。
最终结果 61 68 72 75 77 80 87 88 92 96
i=1的行表示i=1这一趟的排序结果
以i=6即插入77为例说明一趟的过程:
i=5的排序结果:
有序区
0
9内排序
第 九 章 内 排 序
归并排序
E1:设每个元素为一个有序序列,即有序子序列长度为1; E2:循环直到整个序列有序
E21:两两归并相邻有序子序列; E22:有序子序列长度加倍;
…
…
…
s
…
t-1
t
…
u
…
…
…
…
…
s
…
t-1
t
…
u
…
…
36
27
73
15
64
48
75
77
49
30
12
54
36
27 36
第 九 章 内 排 序
25 17 17 17 17 17
二、简单排序法
插入排序法
第 九 章 内 排 序
基本思想
E1:将待排序序列看作由已排序序列和未排序序列两部分 构成,初始时,取第一个元素为已排序序列,剩余元素为 未排序序列; E2:循环直到未排序序列为空
E21:任取未排序序列中的一个元素,插入到已排序序列中;
31 45 25 25 31 12 19 23 20 36 66 52
25
97 25 7575 25 45 Nhomakorabea66
45 25 31
23
36
52
31 25
12
19
20
25 97
三、先进排序法
堆排序法
第 九 章 内 排 序
建堆
38 98 63 63 98 47 47 36 98 63 38 52 39 39 52 19
37
37 33
数据结构第九章 排序题库(40道)
数据结构第九章排序1、内排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为( )。
——[单选题]A 希尔排序B 冒泡排序C 直接插入排序D 简单选择排序正确答案:C2、对有n个记录的表进行直接插入排序,在最坏情况下需进行( )次关键字比较。
——[单选题]A n-1B n+1C n/2D n(n-1)/2正确答案:D3、在下列算法中,( )算法可能出现下列情况:在最后一趟开始之前,所有的元素都不在其最终的位置上。
——[单选题]A 堆排序B 冒泡排序C 直接插入排序D 快速排序正确答案:C4、对数据序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排序变为{9,15,7,8,20,-1,4},则采用的是( )算法。
——[单选题]A 简单选择排序B 冒泡排序C 直接插入排序D 堆排序正确答案:C5、数据序列{5,4,15,10,3,1,9,6,2}是某排序方法第一趟后的结果,该排序算法可能是( )。
——[单选题]A 冒泡排序B 二路归并排序C 堆排序D 简单选择排序正确答案:B6、从未排序序列中挑选元素,并将其依次插入已排序序列的一端的方法,称为( )。
——[单选题]A 希尔排序B 归并排序C 直接插入排序D 简单选择排序正确答案:D7、在以下排序方法中,关键字比较的次数与元素的初始排列次序无关的是( )。
——[单选题]A 希尔排序B 冒泡排序C 插入排序D 简单选择排序正确答案:D8、对n个不同的关键字进行递增冒泡排序,在下列哪种情况下比较的次数最多( )。
——[单选题]A 元素无序B 元素递增有序C 元素递减有序D 都一样正确答案:C9、对数据序列(8,9,10,4,5,6,20,1,2)进行递增排序,采用每趟冒出一个最小元素的冒泡排序算法,需要进行的趟数至少是( )。
——[单选题]A 3B 4C 5D 8正确答案:C10、为实现快速排序法,待排序序列最好采用的存储方式是( )。
数据结构习题汇编09 第九章 排序 试题
数据结构课程(本科)第九章试题一、单项选择题1.若待排序对象序列在排序前已按其排序码递增顺序排列,则采用()方法比较次数最少。
A. 直接插入排序B. 快速排序C. 归并排序D. 直接选择排序2.如果只想得到1024个元素组成的序列中的前5个最小元素,那么用()方法最快。
A. 起泡排序B. 快速排序C. 直接选择排序D. 堆排序3.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。
这样的排序方法是()。
A. 直接选择排序B. 直接插入排序C. 快速排序D. 起泡排序4.对5个不同的数据元素进行直接插入排序,最多需要进行()次比较?A. 8B. 10C. 15D. 255.如果输入序列是已经排好顺序的,则下列算法中()算法最快结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序6.如果输入序列是已经排好顺序的,则下列算法中()算法最慢结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序7.下列排序算法中()算法是不稳定的。
A. 起泡排序B. 直接插入排序C. 基数排序D. 快速排序8.假设某文件经过内部排序得到100个初始归并段,那么如果要求利用多路平衡归并在3 趟内完成排序,则应取的归并路数至少是()。
A. 3B. 4C. 5D. 69.采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要()次比较。
A. 5B. 6C. 7D. 810.下列算法中()算法不具有这样的特性:对某些输入序列,可能不需要移动数据对象即可完成排序。
A. 起泡排序B. 希尔排序C. 快速排序D. 直接选择排序11.使用递归的归并排序算法时,为了保证排序过程的时间复杂度不超过O(nlog2n),必须做到()。
A. 每次序列的划分应该在线性时间内完成B. 每次归并的两个子序列长度接近C. 每次归并在线性时间内完成D. 以上全是12.在基于排序码比较的排序算法中,()算法的最坏情况下的时间复杂度不高于O(nlog2n)。
第九章流水作业的排序问题
3
4
69
312
215
924
8 26 2 28
举例
J1
J2
J3
J4
J5
J6
机器1 pi1
5
5
4
1
2 10
机器2 pi2
5
5
5
3
6 10
机器3 pi3
8
3
3
4
7
4
机器4 pi4
2
8
2
1
5
6
机器5 pi5
5
2
1
2
8 10
总和
25 23 15 11 28 40
具体过程
(1)找出关键工件:工作负荷最大的40,对应的是工 件 6, Jc=J6
m
m 1
T平= 顺 n ti(n1) mtijn ,tj (1)
i 1
j 1
工 序 t1
t2
t3 t4
k m 1l
算法求
(m-1)次加工顺序,取其中最好的结果。
举例
i
1
Pi1
1
l=1
Pi3
4
Pi1+Pi2 9 l=2
Pi2+Pi3 12
23 4 263 582 6 8 12 9 10 11
当l=1时,按Johnson算法得到加工顺序 (1,2,3,4)
i12 Pi1 11 2 3 Pi2 89 4 13 Pi3 413 518
t2 t3
40 60
t4
120
160
T顺=4×(10+5+15+10)=160(分钟)
2、平行移动方式
每个零件在前道工序加工完毕后,立即转移到下道工
第九章——5直接选择排序
13
27
38
49
49*
97
65
76
13
27
38
49
49*
65
97
76
第七趟排序后:
13
27
38
49
49*
65
76
97
2 直接选择排序算法
ห้องสมุดไป่ตู้
算法9-8
void SelectSort(int a[],int n ) { /*直接选择排序算法*/
int i,j,temp,min;
/*min用于存放最小记录的下标*/
• 直接选择排序是不稳定的排序方法
谢谢学习
主讲教师:赵宁
}
}
}
3 直接选择排序算法的性能分析
时间性能 • “移动”的次数 时间性能
待排序记录为正序:0 待排序记录为逆序:3(n-1) • “比较”的次数:与记录的初始排列无关
(n-1)+(n-2)+…+2+1=n(n-1)/2 • 时间复杂度都为O(n2)
3 直接选择排序算法的性能分析
其他性能
• 直接选择排序在排序过程中只用了一个辅助单元用于记录 的交换,因此其空间复杂度是O(1),为就地排序。
1 直接选择排序基本思想——排序示例
1
2
3
4
5
6
7
8
初始关键字序列:
49
38
65
97
76
13
27
49*
第一趟排序后:
13
38
65
97
76
49
27
49*
第二趟排序后:
13
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直接插入排序:基本思想
方法
(2)依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值 有序的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
temp 0 1 2 3 4 5 6 7
二趟
38 49 65 97 76 13 27 49 1次
排序 18
直接插入排序:基本思想
方法
排序 16
直接插入排序(最简单的排序法!)
方法
(2)依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值 有序的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
temp 0 1 2 3 4 5 6 7
一趟
49 38 65 97 76 13 27 49
1次 123次
排序 17
数据结构
9 排序
排序
1
主要内容
• 什么是排序 • 内部排序
– 插入式排序:直接插入排序法、希尔排序法 – 交换式排序:起泡法、快速排序法 – 选择式排序:直接选择排序法、树形选择排序法、堆排序 – 归并排序 – 基数排序 • 各种内部排序方法的比较
排序
2
9.1 什么是排序
• 将n个性质相同的数据元素(通常都是杂乱无章的)按待排 关键字值从小到大或从大到小(规律)排为有序序列的操 作称作排序。
typedef struct
{
int key;
//数据元素的关键字
datatype other; //数据元素中的其它域
}rectype;
//一条数据记录
rectype R[n]; //记录型数组
排序 12
9.2 插入式排序
直接插入排序法 折半插入排序法 希尔排序法
排序 13
9.2 插入式排序
排序 14
9.2 插入式排序
– 类比:扑克牌抓牌
2
4 35
534 2
排序 15
直接插入排序(最简单的排序法!)
方法 设对数据元素序列R1,R2,…,Rn进行排序,则: (1)仅含R1的序列是长度为1的按关键字值有序的序列;
举例
temp 0 1 2 3 4 5 6 7
初始
49 38 65 97 76 13 27 49
temp 0 1 2 3 4 5 6 7
五趟
38 49 65 76 97 13 27 49
12345次 1234567次
排序 21
直接插入排序:基本思想
成绩 67 72 83 83 92
排序
9
什么是排序
• 排序算法优劣的衡量 – 时间复杂度(分析记录关键字的比较次数和记录的移动次 数) • 平均情况 • 最好情况和最差情况:有一些算法,其复杂度受最初数 据的排列情况影响较大 • 可以认为高效率的排序算法应该是尽可能少的比较次数 和尽可能少的数据元素移动次数
举例
比较 移动 次数 次数
temp 0 1 2 3 4 5 6 7
四趟
38 49 65 97 76 13 27 49
12次 123次
排序 20
直接插入排序:基本思想
方法
(2)依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值 有序的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
分数据有元序素序放列置区在内存无,序另一序部分列数区据元素放置在外部存储
器中,整个排序过程需要在内外存之间多次交换数据才能得
到排序的结果。
经过一趟排序
有序序列区 无 序 序 列 区
排序
4
排序的分类
- 按排序的规则(“扩大”有序序列长度的方法)不同,内部 排序的算法可分为5类:
插入排序、交换排序、选择排序、归并排序、基数排序
排序 10
什么是排序
• 排序算法优劣的衡量 – 空间复杂度 • 排序时所需的额外的辅助存储空间 • 额外:指除了存放数据元素占用的存储空间之外,执 行算法所需要的其他存储空间 • 理想的空间效率是算法执行期间所需要的辅助空间与 待排序的数据量无关
排序 11
什么是排序
• 教材采用的排序表的结构定义
学号 1 3 2 5 4
姓名 王云 刘小玲 李永强 陈晓壮 赵祥
成绩 67 72 83 83 92
排序
8
举例
排序方法B
可能
原序列
非稳定的排序方法
赵祥 陈晓壮
成绩 67 83 72 92 83
学号 1 3 5 2 4
姓名 王云 刘小玲 陈晓壮 李永强 赵祥
(2)依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值 有序的序列,并使插入完成后的序列仍按关键字值有序。
举例
比较 移动 次数 次数
temp 0 1 2 3 4 5 6 7
三趟
38 49 65 97 76 13 27 49 1次
排序 19
直接插入排序:基本思想
方法
(2)依次逐个将Ri(i=2,3,…,n)插入已有的按关键字值 有序的序列,并使插入完成后的序列仍按关键字值有序。
-按排序算法的时间复杂度不同,可分为3类: ❖ 简单排序算法:时间效率低,O(n2) ❖ 先进排序算法: 时间效率高,O(nlog2n) ❖ 基数排序算法:时间效率高,O(d×n)
关键字的位数(长度)
排序
5
排序的分类
• 按文件的存储结构分: a.连续顺序文件排序 -排序时直接移动记录 b.链表排序 -排序时只移动指针
• 排序的目的:便于查找。
注意 当按次关键字进行排序时,由于可能存在关键字值相同的 元素,因而排序结果不唯一。
排序
3
排序的分类
• 按排序过程中使用的存储器分: • 内部排序
– 数据对象全部存放在内存中进行的排序,即整个排序过程不 需要访问外存便能完成
• 外部排序
– 数据对象个数太多,不能同时存放在内存中,而需要将一部
排序
6
排序的分类
• 按排序的稳定性分: • 稳定性排序 • 不稳定性排序
对于值相同的两个元素,排序前后的先后次序不变,则称 该排序方法为稳定的,否则为不稳定的。
排序
7
举例
排序方法A
必然
原序列
稳定的排序方法
排序结果
学号 1 2 3 4 5
姓名 王云 李永强 刘小玲 赵祥 陈晓壮
成绩 67 83 72 92 83
• 基本思想: – 每一步将一个待排序的对象,按其关键字大小,插入到前 面已经排好序的文件中的适当位置上,直到全部记录插入 为止 – 第i趟排序将序列的第i+1个元素ki+1插入到一个大小为i, 且已按值有序的序列k1,k2,…,ki的合适位置,得到一个 大小为i+1,并且仍然保持按值有序的序列k1,k2,…,ki+1