9 排序.docx
- 文档编号:7079286
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:13
- 大小:307.92KB
9 排序.docx
《9 排序.docx》由会员分享,可在线阅读,更多相关《9 排序.docx(13页珍藏版)》请在冰豆网上搜索。
9排序
9排序
9.1 选择题
1.从末排序的序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在排序序列的合适位置,该排序方法称为( )排序法。
A)插入B)选择C)希尔D)二路归并
【答案】A
2.下面各种排序方法中,最好情况下时间复杂度为O(n)的是( )
A)快速排序B)直接插入排序C)堆排序D)归并排序
【答案】B
3.用某种排序方法对线性表(25,84,21,47,15,27,68,35,20)进行排序时,无序序列的变化情况如下:
258421471527683520
201521254727683584
152021253527476884
152021252735476884
则所采用的排序方法是( )
A)选择排序 B)希尔排序 C)归并排序 D)快速排序
【答案】D
4.下面给出的四种排序法中,( )排序是不稳定排序法。
A)插入B)冒泡C)二路归并D)堆
【答案】D
5.快速排序方法在( )情况下最不利于发挥其长处。
A)要排序的数据量太大
B)要排序的数据中含有多个相同值
C)要排序的数据已基本有序
D)要排序的数据个数为奇数
【答案】C
6.一组记录的关键码为(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
【答案】C
7.对记录的关键码{50,26,38,80,70,90,8,30,40,20}进行排序,各趟排序结束时的结果为:
50,26,38,80,70,90,8,30,40,20
50,8,30,40,20,90,26,38,80,70
26,8,30,40,20,80,50,38,90,70
8,20,26,30,38,40,50,70,80,90
其使用的排序方法是( )
A)快速排序B)基数排序C)希尔排序D)归并排序
【答案】C
8.在文件“局部有序”或文件长度较小的情况下,最佳内部排序方法是( )
A)直接插入排序B)冒泡排序C)简单选择排序D)归并排序
【答案】A
【解析】当待排序列基本有序时,对冒泡排序来说,若最大关键字位于序列首部,则每趟排序仅能使其“下沉”一个位置,要使其下沉到底部仍需n-1趟排序,也即时间复杂度仍为O(n2)。
而对简单选择排序来说,其比较次数与待排序列的初始状态无关;归并排序要求待排序列已经部分有序,而部分有序的含义是待排序列由若干有序的子序列组成,即每个子序列必须有序,并且其时间复杂度为O(nlog2n);直接插入排序在待排序列基本有序时,每趟的比较次数大为降低,也即n-1趟比较的时间复杂度由O(n2)降至O(n)。
9.在下列算法中,( )算法可能出现下列情况:
在最后一趟开始之前,所有的元素都不在其最终的位置上。
A)堆排序B)冒泡排序C)插入排序D)快速排序
【答案】C
【解析】在插入排序中,如果待排序列中的最后一个元素其关键字值为最小,则在最后一趟开始之前,前n-1个排好序的元素都不在其最终位置上,与排好序后的位置相差一个位置。
因此,选C。
10.设有5000个无序的元素,希望用最快速度挑选出其中前10个最大的元素,在以下的排序方法中,采用( )方法最好
A)快速排序B)堆排序C)基数排序
【答案】B
【解析】用堆排序最好,因为堆排序不需要等整个排序结束就可挑出前10个最大元素,而快速排序和基数排序都需等待整个排序结束才能知道前10个最大元素。
11.对给出的一组关键字{14,5,19,20,11,19}。
若按关键字非递减排序,第一趟排序结果为{14,5,19,20,11,19},问采用的排序算法是( )
A)简单选择排序B)快速排序C)希尔排序D)二路归并排序
【答案】C
12.以下序列不是堆的是( )
A)100,85,98,77,80,60,82,40,20,10,66
B)100,98,85,82,80,77,66,60,40,20,10
C)10,20,40,60,66,77,80,82,85,98,100
D)100,85,40,77,80,60,66,98,82,10,20
【答案】D
【解析】根据堆采用完全二叉树的顺序存储形式及堆的特点,因第一个结点即根结点关键字值最大,则应建立一个大根堆,但依据此数据序列建立起堆后关键字值为40的左右孩子结点分别为60、66,不符合大根堆特点。
13.下面排序方法中,关键字比较次数与记录的初始排列无关的是( )
A)希尔排序B)冒泡排序C)直接插入排序D)直接选择排序
【答案】D
【解析】如果初始排列基本有序,则对希尔排序来说,前几趟的插入工作大为减少。
冒泡排序和直接插入排序都与初始排序序列有关,只有直接选择排序与初始序列无关.故选D。
14.一组记录的关键字为{45,80,55,40,42,85},则利用堆排序的方法建立的初始堆为( )
A)80,45,50,40,42,85
B)85,80,55,40,42,45
C)85,80,55,45,42,40
D)85,55,80,42,45,40
【答案】B
15.一组记录的关键字为{25,50,15,35,80,85,20,40,36,70},其中含有5个长度为2的有序表,用归并排序方法对该序列进行一趟归并后的结果为( )
A)15,25,35,50,20,40,80,85,36,70
B)15,25,35,50,80,20,85,40,70,36
C)15,25,50,35,80,85,20,36,40,70
D)15,25,35,50,80,20,36,40,70,85
【答案】A
【解析】对5个长度为2的有序表一趟归并后得到前两个长度为4的有序表和最后一个长度为2的有序表,故选A。
16.n个元素进行冒泡排序的过程中,最好情况下的时间复杂度为( )
A)O
(1)B)O(log2n)C)O(n2)D)O(n)
【答案】D
【解析】最好情况下至少需要一趟排序,即比较n-1次,故选D。
17.n个元素进行快速排序的过程中,第一次划分最多需要移动( )次元素(包括开始将基准元素移到临时变量的那一次)。
A)n/2B)n-1C)nD)n+l
【答案】D
【解析】移动次数最多的情况是对n-1个元素比较时都需移动,加上开始将基准元素移到临时变量以及由临时变量移至正确位置的二次,即共需n+1次,故选D。
18.下述几种排序方法中,要求内存量最大的是( )
A)插入排序B)选择排序C)快速排序D)归并排序
【答案】D
【解析】插入排序和选择排序需要的辅助空间为O
(1),快速排序需要的辅助空间为O(log2n),归并排序需要的辅助空间为O(n),因此选D。
19.下面排序方法中,时间复杂度不是O(n2)的是( )
A)直接插入排序B)二路归并排序C)冒泡排序D)直接选择排序
【答案】B
【解析】直接插入排序、冒泡排序和直接选择排序的时间复杂度为O(n2),而二路归并排序的时间复杂度为O(nlog2n),故选B。
20.对下列4个序列用快速排序方法进行排序,以序列的第1个元素为基准进行划分。
在第1趟划分过程中,元素移动次数最多的是序列( )
A)70,75,82,90,23,16,10,68
B)70,75,68,23,10,16,90,82
C)82,75,70,16,10,90,68,23
D)23,10,16,70,82,75,68,90
【答案】A
【解析】快速排序第一趟划分的方法是:
将第1个元素放入最终排好序序列中的正确位置上,则在这个位置右边小于该元素值的元素都将移到其左边,在这个位置左边大于该元素值的元素都将其移到其右边。
由此得到A需移动的元素最多,故选A。
9.2 填空题
1.当数据量特别大需借助外部存储器对数据进行排序,则这种排序称为_____________。
【答案】外部排序
2.在堆排序、快速排序和归并排序中,若从节省存储空间考虑,则应首先选取_____________方法,其次选取_____________方法;若只从排序结果的稳定性考虑,则应先择_____________方法;若只从平均情况下排序的速度来考虑,则选择_____________方法;若只从最坏情况下排序最快并且要节省内存考虑,则应选取_____________方法。
【答案】
(1)堆排序
(2)快速排序 (3)归并排序 (4)快速 (5)堆
3.对n个元素的序列进行冒泡排序,最少的比较次数是_____________,此时元素的排列情况为_____________,在_____________情况下比较次数最多,其比较次数为_____(4)_____。
【答案】
(1)n-1
(2)从小到大排序 (3)元素从大到小排列 (4)n(n-1)/2
【解析】初始元素正序时,第一趟比较n-1次,并无数据交换,则不再比较,故只比较n-1次。
若反序,则比较(n-1)+(n-2)+(n-3)+…..+2+1共n(n-1)/2次。
4.希尔排序是把记录按下标的一定增量分组,对每组记录进行直接插入排序,随着增量_____________,所分成的组包含的记录越来越多,当增量的值为_____________时,整个数组合为一组。
【答案】
(1)减少
(2)1
5.直接插入排序需借助的存储单元个数(空间复杂度)为_____________,最好情况下直接插入排序的算法时间复杂度为_____________,最坏情况下该算法的时间复杂度为_____________。
【答案】
(1)1
(2)O(n)(3)O(n2)
6.对n个数据进行简单选择排序,所需进行的关键字间的比较次数为_____________,时间复杂度为_____________。
【答案】
(1)n(n-1)/2
(2)O(n2)
7.对于关键字序列(12,13,11,18,60,15,7,20,25,100),用筛选法建堆,必须从键值为_____________的关键字开始。
【答案】60
【解析】建堆必须从n/2结点开始,而10/2=5位置的结点值为60,故填60。
8.对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到已排序的有序表时,为寻找其插入位置需比较_____________次。
【答案】3
【解析】当把第7个记录60插入到有序表时,则前6个记录已经有序,此时记录60由后向前与有序表中的元素进行比较,直到遇到值小于60的记录为止,也即在有序表(15,23,38,54,72,96)中共需比较3次,因此填3。
9.若对顺序存储在A[l]~A[9]的记录(76,38,62,53,80,74,83,65,85)进行堆排序,已知除第一个元素76外,以其余元素为根的结点都已是堆,则对第一个元素进行筛运算时,它将最终被筛到A数组下标为_____________的位置上。
【答案】8
【解析】从树结构关键字值看,除根外是小根堆。
对第一元素进行筛运算时,得到的数据序列为:
38,53,62,65,80,74,83,76,85。
11.在时间复杂度为O(log2n)的排序方法中,_____________排序方法是稳定的;在时间复杂度为O(n)的排序方法中,_____________排序方法是不稳定的。
【答案】
(1)归并
(2)直接选择
12.设表中元素的初态是按键值递增的,若分别用堆排序、快速排序、冒泡排序和归并排序方法对其仍按递增顺序进行排序,则_____________最省时间,_____________最费时间。
【答案】
(1)冒泡排序
(2)快速排序
【解析】若初始序列已经有序,则冒泡排序仅需一趟(比较n-1次);而快速排序则需n-1趟,其时间复杂度升至O(n2)。
因此填:
冒泡排序,快速排序。
13.从一个无序序列建立一个堆的方法是:
首先将要排序的n个键值分放到一棵______________的各个结点中,然后从i=_____________的结点Ki开始,逐步把以Ki-1、Ki-2、…、K1为根的子树排成堆,直到以Kl为根的树排成堆,就完成了建堆的过程。
【答案】
(1)完全二叉树
(2)n/2下取整。
14.在归并排序中,若待排序记录的个数为20,则共需要进行_____________趟归并,在第三趟归并中,是把长度为_____________的有序表归并为长度为_____________的有序表。
【答案】
(1)5
(2)4 (3)8
【解析】第一次把长度为1的归并为长度的2的子表共10个,第二次把长度为2的归并成长度为4的子表共5个,第三次把长度为4的归并为长度为8的共3个,第四次长度为8归并为长度为16的,第5次归并成一个有序表。
9.3 判断题
1.对一个堆,按二叉树层次进行遍历可以得到一个有序序列()
【答案】×
【解析】堆的定义只规定了结点与其左、右孩子结点间的大小关系,而同一层上属不同父母的结点之间并无明确的大小关系,所以堆的层次遍历并不能得到一个有序序列。
2.内部排序就是整个排序过程完全在内存中进行的排序()
【答案】√
3.在数据基本有序时,直接插入排序法一定是性能最好的算法()
【答案】×
【解析】在数据量较少且数据基本有序时,直接插入法性能较好,但当数据量大时,则该算法的性能会大大降低。
4.当数据序列已有序时,若采用冒泡排序法,数据比较n-1次()
【答案】√
5.内排序中的快速排序方法,在任何情况下均可得到最快的排序效果()
【答案】×
【解析】快速排序在待排序记录为随机分布时效果最好,基本有序时效果最差。
6.用希尔方法排序时,若关键字的初始排序杂乱无序,则排序效率就低()
【答案】×
【解析】希尔排序又称“缩小增量排序”,即每趟只对相同增量距离的关键字进行比较,这与关键字序列初始有序或无序无关。
7.有一小根堆,堆中任意结点的关键字均小于它的左、右孩子关键字。
则其具有最大值的结点一定是一个叶结点并可能在堆的最后两层中()
【答案】√
8.对n个记录的集合进行归并排序,在最坏情况下所需要的时间是O(n2)()
【答案】×
【解析】归并排序不受记录初始序列的影响,即所谓的最坏情况,其所需时间也是O(nlog2n)。
9.对n个记录的集合进行冒泡排序,在最坏情况下所需要的时间是O(n2)()
【答案】√
9.4 应用题
1.什么是内排序?
什么是外排序?
什么排序方法是稳定的?
什么排序方法是不稳定的?
【答案】内排序是排序过程中参与排序的数据全部在内存中所做的排序,排序过程中无需进行内外存数据传送,决定排序方法时间性能的主要是数据排序码的比较次数和数据对象的移动次数。
外排序是在排序的过程中参与排序的数据太多,在内存中容纳不下,因此在排序过程中需要不断进行内外存的信息传送的排序。
假设在待排序的文件中存在两个或两个以上的记录具有相同的关键字,若采用某种排序方法后,使得这些具有相同关键字的记录在排序前后相对次序依然保持不变,则认为该排序方法是稳定的,否则就认为排序方法是不稳定的。
2.冒泡排序算法是否稳定?
为什么?
【答案】冒泡排序算法是稳定的。
因为依据该排序算法的基本思想,排序过程只比较相邻两个记录的关键字,若交换记录也只在相邻二个记录之间进行,从而可知在交换过程中不会出现跨越多个记录的情形。
即使是相邻两个记录关键字相同时,经过比较也不会产生相邻记录的交换。
所以冒泡排序法不会改变相同关键字记录的相对次序,故是稳定的。
3.在起泡排序过程中,什么情况下排序码会朝向与排序相反的方向移动,试举例说明。
在快速排序过程中有这种现象吗?
【答案】如果在待排序序列的后面的若干排序码比前面的排序码小,则在起泡排序的过程中,排序码可能向与最终它应移向的位置相反的方向移动。
例如:
初始关键字:
59451090
第一趟排序:
45105990
第二趟排序:
10455990
其中45在第一趟排序中移向了与最终位置相反的方向。
但在快速排序中不会出现这种情况,因为在每趟排序中,比基准元素大的都交换到右边,而比基准元素小的都交换到左边。
4.设待排序的排序码序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使用以下排序方法每趟排序后的结果。
并说明做了多少次排序码比较。
(1)直接插入排序
(2)希尔排序(增量为5,2,1)
(3)起泡排序(4)快速排序
(5)基数排序(6)堆排序
【答案】
(1)直接插入排序
(2)希尔排序(增量为5,2,1)
(3)起泡排序
(4)快速排序
(5)基数排序
按最低位分配
收集
按最高位分配
收集
(6)堆排序
第一步,形成初始的最大堆(略),第二步,做堆排序。
初始排列,不是最大堆形成初始最大堆交换0#与9#对象
从0#到8#重新形成堆交换0#与8#对象从0#到7#重新形成堆
交换0#与7#对象从0#到6#重新形成堆交换0#与6#对象
从0#到5#重新形成堆交换0#与5#对象从0#到4#重新形成堆
交换0#与4#对象从0#到3#重新形成堆交换0#与3#对象
从0#到2#重新形成堆交换0#与2#对象从0#到1#重新形成堆
交换0#与1#对象 从0#到1#重新形成堆,得到结果
5.试构造对5个整数元素进行排序,最多只用7次比较的算法思想。
【答案】设5个元素分别用a,b,c,d,e表示,取a与b,c与d进行比较,若a>b,c>d(也可能是ad,则a>b>d,若b
从而经过7次比较对5个数进行排序。
6.对一个具有7个记录的文件进行快速排序,请问:
(1)在最好情况下需进行多少次比较?
并给出一个最好情况初始排列的实例。
(2)在最坏情况下需进行多少次比较?
为什么?
并给出此时的实例。
【答案】
(1)在最好情况下,由于快速排序是一个划分子区间的排序,每次划分最好能得到两个长度相等的子表,设表的长度为n=2k-1,显然有,第一遍划分得到两个长度均为 n/2 的子表。
第二遍划分得到4个长度均为n/4 的子表,以此类推,总共进行k=log2(n+1)遍划分,各子表的长度均为1时,此时排序结束。
由于n=7,k=3,在最好情况下,第一遍经过6次,可找到一个其基准是正中间的元素,第二遍分别对两个子表(此时长度为3)进行排序,各需要2次,这样就可将整个数据序列排序完毕,从而知7个数据的最好情况下需进行10次比较。
如:
4,7,5,6,3,1,2。
(2)在最坏情况下,若每次划分时用的基准,它的关键字值是当前记录中最大(或最小值),那么每次划分只能得到左子表(或右子表),子表长度只比原表减少了一个。
因此,若初始排列的记录是按关键字递增或递减的,而所得的结果须为递减或递增排列的,此时快速排序就退化为与冒泡排序相似,而且时间复杂度为O(n2),此时反而不快了。
对于n=7的数据序列,显然最坏情况下的比较次数为21。
例如:
7,6,5,4,3,2,1。
7.如果某个文件经内排序得到80个初始归并段,试问:
(1)若使用多路归并执行3趟完成排序,那么应取的归并路数至少应为多少?
(2)如果操作系统要求一个程序同时可用的输入/输出文件的总数不超过15个,则按多路归并至少需要几趟可以完成排序?
如果限定这个趟数,可取的最低路数是多少?
【答案】
(1)设归并路数为k,初始归并段个数m=80,根据归并趟数计算公式S=logkm=logk80=3得:
k3≥80。
由此解得k≥3,即应取的归并路数至少为3。
(2)设多路归并的归并路数为k,需要k个输入缓冲区和1个输出缓冲区。
1个缓冲区对应1个文件,有k+1=15,因此k=14,可做14路归并。
由S=logkm=log1480=2。
即至少需2趟归并可完成排序。
若限定这个趟数,由S=logk80=2,有80≤k2,可取的最低路数为9。
即要在2趟内完成排序,进行9路排序即可。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 排序