第九章 排序
数据结构第九章排序习题与答案
习题九排序一、单项选择题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则采用的排序是( )。
第九章 排序
第九章排序一、选择题1.对n个记录的文件进行快速排序,所需要的辅助存储空间大致为n) D. O(n2)A. O(1)B. O(n)C. O(1og22.对于线性表(7,34,55,25,64,46,20,10)进行散列存储时,若选用H (K)=K %9作为散列函数,则散列地址为1的元素有()个,A.1 B.2 C.3 D.43. 设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为()。
A.2,3,5,8,6 B. 3,2,5,8,6C. 3,2,5,6,8 D. 2,3,6,5,84.设有n个待排序的记录关键字,则在堆排序中需要()个辅助记录单元。
n D. n2A. 1 B. n C. nlog25.设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为( )。
A. 10,15,14,18,20,36,40,21B.10,15,14,18,20,40,36,21C. 10,15,14,20,18,40,36,2lD. 15,10,14,18,20,36,40,216.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列()方法可以达到此目的。
A.快速排序B.堆排序C.归并排序 D.插入排序7.下列四种排序中()的空间复杂度最大。
A.插入排序B.冒泡排序C. 堆排序D.归并排序8.设一组初始记录关键字序列为(345,253,674,924,627),则用基数排序需要进行()趟的分配和回收才能使得初始关键字序列变成有序序列。
A. 3B. 4C. 5D. 89.下列四种排序中()的空间复杂度最大。
A.快速排序B. 冒泡排序C. 希尔排序D. 堆10.设一组初始记录关键字序列为(50,40,95,20,15,70,60,45),则以增量d=4的一趟希尔排序结束后前4条记录关键字为()。
数据结构第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.2 流水作业排序问题
一、最长流程时间Fmax的计算
工件 Si在机器MK 上的完工时间为CKSi • 工件 Si在机器MK 上的加工时间为PSiK
• C1Si= C1Si-1+PSi1 • CKSi=max{ C(k-1)Si, CkSi-1 }+PSik
举例:有一个6/4/p/ Fmax问题,其加工时间如下 表所示。当按顺序S=(6,1,5,2,4,3) 加工时,求Fmax。
• (1,2,3,4)或(2,1,3,4)
i12 Pi1 11 2 3 Pi2 89 4 13 Pi3 413 518
Fmax=28
3
4
69
312
215
924
8 26 2 28
i21 Pi1 22 13 Pi2 46 814 Pi3 511 418
3
4
69
312
216
925
8 26 2 28
Fmax=28 加工顺序(1,2,3,4)或(2,1,3,4)
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
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
数据结构第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 存放在一静态链表中(见下图),并对其按照链式基数排序法进行升序排序。
数据结构习题及答案(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。
第一阶段
第二阶段:归并过程
第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、为实现快速排序法,待排序序列最好采用的存储方式是( )。
第九章流水作业的排序问题
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)。
第九章排序一、选择题1.当待排序列基本有序的情况下,最佳的排序方法是( )。
A. 插入排序B. 选择排序B. 归并排序 D. 快速排序2.设有1,000个无序元素,希望选出10个最小元素,效率最高的排序方法是()。
A. 快速排序 B 基数排序D. 堆排序 D. 希尔排序3.若待排序按关键字基本有序,不能选择哪种排序方法()。
A. 冒泡排序B. 直接选择排序C. 直接插入排序D. 快速排序4.在下列排序方法,比较次数与待排序列初始状态无关的是()。
A. 选择排序B. 插入排序C. 希尔排序D. 冒泡排序5.下列排序方法中,不稳定的排序方法是()。
A. 归并排序B. 直接插入排序C. 冒泡排序D. 直接选择排序6.下列排序方法中,空间复杂度为O(1)的算法的是()。
A. 归并排序B. 堆排序C. 快速排序 C. 基数排序7.下列排序方法中不属于就地排序算法的是()。
A. 希尔排序B. 归并排序C. 冒泡排序D. 堆排序8.初始关键字序列为(46,56,18,73,44,30,57,34),经过一趟排序后关键字序列为(34,30,18,44,46,73,57,56),所采用的排序方法是()。
A. 归并排序B. 堆排序C. 快速排序 C. 基数排序A.(46,56,18,73,30,44,34,57)B.(18,46,56,73,44,30,57,34)C.(18,30,44,46,56,73,57,34)D.(18,46,56,30,73,44,34,57)10.初始关键字序列为(46,56,18,73,44),利用筛选算法所建初始堆为()。
A. (18,44,46,73,56)B. (18,46,44,56,73)C. (56,73,46,44,18)D. (18,44,46,56,73)11.对n个关键字不同的记录进行冒泡排序,最多的比较次数是( )。
A. nB. n-1C. n(n-1)/2D. n(n+1)/212.直接插入的排序在哪种情况下比较次数为n-1 。
( )A. 待排关键字序列为逆序;B. 待排关键字序列有序;C. 待排关键字序列无序;D. 待排关键字局部有序。
13.排序平均时间为O(nlgn)并且是稳定的排序方法是( )。
A. 归并排序B. 堆排序C. 快速排序 C. 基数排序14.当待排序基本有序,应采用哪种排序方法( )。
A. 快速排序B. 堆排序C. 直接选择排序D. 冒泡排序15.当待排序按关键字随机排列,时间特性最好的排序方法是()。
A. 插入排序B. 选择排序C. 快速排序D. 归并排序二、填空题1.快速排序在情况下时间特性最好,在情况下时间特性最坏,最坏时间复杂度是。
2.就稳定性而言,直接选择排序是的排序方法;基数排序是的排序方法;堆排序是的排序方法;希尔排序是的排序方法。
3.就空间特性而言,快速排序的空间复杂度为;基数排序的空间复杂度为;归并排序的空间复杂度为,堆排序的空间复杂度为。
4.在插入和选择排序中,若初始关键字序列基本有序,应选用,若初始序列基本反序应选用。
5.在堆排序和快速排序中,若初始关键字序列基本有序,应选用,若初始序列无序选用。
增量为3)则结果为:。
7.通常在排序算法中的两个基本操作是和。
8.对n个元素进行冒泡排序,最多的比较次数是;最少的比较次数是。
9.初始关键字序列为(12,33,54,27,34,55,2,12,37,68,8),进行直接插入排序,当把34插入有序序列需比较的次数是。
10.若待排序列元素数n较大时,一般选择快速排序、堆排序或归并排序。
若要求时间特性好应选择,要求空间特性好应选择;若要求算法是稳定的有选择。
三、简答题1.简单选择排序算法是否稳定,试举例说明。
2.初始关键字序列为23,12,43,8,45,50,35,调整其为堆结构。
3.初始关键字序列为21,34,14,56,25,73,34,65,79,86,3,7,18写出希尔排序过程(增量序列为5,3,1)。
4.初始关键字序列为23,12,43,8,45,50,35,写出归并排序过程。
5.有n个不同的英文单词,长度相等,均为m,若n>50,m<5,则采用什么排序方法最好,为什么?6.对关键字序列(72,87,61,23,94,16,05,58)进行堆排序,使之按关键字递减次序排列。
请写出排序过程中得到的初始堆和前三趟的序列状态。
四、程序阅读题1.下列程序是插入排序算法,请在划线处填上适当语句。
void insertsort(Seqlist R){int i,j;for(i=2,i<=n;i++)if(R[i].key<R[i-1].key){ (1) ;j=i-1;do {R[j+1]=R[j]; (2) ;}while(R[0].key<R[j].key);(3) ;}//endif}2.阅读程序void dbubble(Seqlist R){int i=1,j,tag=1;datatype t;while(tag){ tag=0;for(j=n-i+1;j>=i+1;j--)if(R[j].key<R[j-1]){ tag=1;t=R[j];R[j]=R[j-1];R[j-1]=t;}for(j=i+1;j<=n-i;j++)if(R[j].key>R[j+1]){ tag=1;t=R[j];R[j]=R[j+1];R[j+1]=t;}i++;}}(1)指出程序功能;(2)若R的初始值为:3,18,18,23,28,34,45,56,67,算法执行后R的值是什么?3.阅读下列算法,并回答下列问题:(1)该算法采用何种策略进行排序?(2)算法中R[n+1]的作用是什么?Typedef struct {KeyType key;infoType otherinfo;} nodeType;typedef nodeType SqList[MAXLEN];void sort(SqList R,int n){//n小于MAXLEN-1int k;i;for(k=n-1;k>=1;k--)if(R[k].key>R[k+1].key){R[n+1]=R[k];for(i=k+1;R[i].key<R[n+1].key;i++)R[i-1]=R[i];R[i-1]=R[n+1];}}4..阅读下列函数algo,并回答问题。
(1)假设整型数组A[1..8]中的元素依次为(3,8,9,1,7,4,2,6)。
执行函数调用algo(A,8)时,外层while的循环体执行多少次?函数的返回值是多少?(2)简述函数algo(L,n)的功能。
int algo(int L[ ],int n){int i=0,j,s=1,t=n;while (i!=(n+1)/2){int x=L[s];i=s;j=t;while(i<j){while(i<j && L[j]>=x) j--;L[i]=L[j];while(i<j && L[i]<=x)i++;L[j]=L[i];}L[i]=x;if(i<(n+1)/2) s=i+1;else t=i-1;}if(i==0)return 0;else return L[i];}五、程序设计题1.待排序列以单链表形式存储,试实现选择排序算法。
2.设计快速排序的非递归算法3.将哨兵放在R[n]中,被排序的记录放在R[0..n-1]中,重写直接插入排序算法。
4.以单链表作为存储结构实现直接插入排序算法。
5.试设计一个算法,使得在尽可能少的时间内重排数组,将所有取负值的关键字放在所有取非负值的关键字之前。
请分析算法的时间复杂度。
6.试写一个双向冒泡排序的算法,即在排序过程中交替改变扫描方向。
7.改写快速排序算法,要求采用三者取中的方法选择划分的基准记录;若当前被排序的区间长度小于等于3时,无需继续划分而是采用直接插入方法对其排序。
8.对给定的j(1≤j≤n),要求在无序的记录R[1..n]中找到按关键字自小到大排在第j个位置上的记录(即在无序集合中找到第j个最小元),试利用快速排序的划分思想编写算法,实现上述的查找操作。
9.以单链表为存储结构,写一个直接选择排序算法。
(见同步练习题)10.写一个算法Heapinsert(R,key),将关键字插入到堆R中,并保证插入后R仍是堆。
提示:应为堆R增加一个长度属性描述(即改写本章定义的Seqlist述,使起含有长度域);将key先插入R中已有元素的尾部,然后从下往上调整,使插入的关键之满足堆性质。
请分析算法的时间。
11.写一个堆删除的算法leapdelete(R,i),将R[i]从堆R中删除,并分析算法的时间。
提示:先将R[i]与堆中最后一个元素交换,并将堆长度减1,然后从位置i开始向下调整使其满足堆性质。
12.已知两个单链表中的元素递增有序,试写一算法将这两个有序表归并成一个递增有序的单链表。
算法应利用原有的链表结点空间。
13.设向量A[0..n-1]中存很有n个互不相同的整数,并且每个元素的值均在0到n-1之间,试写1时间为O(n)的算法将向量A排序,结果可输出到另一个向量B[0..n-1]中。