排序试题解析(一)

8.1
一、单项选择题
01.下述排序算法中,不属于内部排序算法的是( C )。
A.插入排序                B.选择排序                C.拓扑排序                D.冒泡排序
解析:拓扑排序是将有向图中所有结点排成一个线性序列,虽然也是在内存中进行的,但它不属于我们这里所提到的内部排序范畴,也不满足前面排序的定义。

02.排序算法的稳定性是指( A )。
A.经过排序后,能使关键字相同的元素保持原顺序中的相对位置不变
B.经过排序后,能使关键字相同的元素保持原顺序中的绝对位置不变
C.排序算法的性能与被排序元素个数关系不大
D.排序算法的性能与被排序元素的个数关系密切

03.下列关于排序的叙述中,正确的是( B )。
A.稳定的排序算法优于不稳定的排序算法
B.对同一线性表使用不同的排序算法进行排序,得到的排序结果可能不同
C.排序算法都是在顺序表上实现的,在链表上无法实现排序算法
D.在顺序表上实现的排序算法在链表上也可以实现
解析:算法的稳定性与算法优劣无关,A排除,使用链表也可以进行排序,只是有些排序算法不再适用,因为这时定位元素只能顺序逐链查找,如折半插入排序

04.对任意7个关键字进行基于比较的排序,至少要进行( A )次关键字之间的两两比较。
A. 13                        B.14                C.15                D.6
解析:对于任意序列进行基于比较的排序,求至少的比较次数应考虑最坏情况,对任意n个关键字排序的比较次数至少为[log2(n!)],将n=7代入公式,答案为13

8.2

一、单项选择题
01.对5个不同的数据元素进行直接插入排序,最多需要进行的比较次数是( B )。
A. 8
B.10
C.15
D. 25

解析:直接插入排序在最坏情况下需要做n(n-1)/2次关键字的比较,当n=5时,关键字比较次数为10.

02.在待排序的元素序列基本有序的前提下,效率最高的排序算法是( A ).
A.直接插入排序
B.简单选择排序
C.快速排序
D.归并排序

解析:由于序列初始基本有序,因此使用直接插入排序算法的时间复杂度接近O(n),而使用其他算法的时间复杂度均大于O(n).

03.在图书馆中,计算机类书籍区共有12列书架,书架上的书都是按照编号排列好的,其中有些书被读者放错了地方,但通常不超过一个书架。未来将这些书重新放回正确的位置,应该采用何种排序算法?( B  )。
A.堆排序
B.直接插入排序
C.归并排序
D.简单选择排序

解析:由于大部分图书都是有序的,因此采用直接插入排序比较合适

04.对有n个元素的顺序表采用直接插入排序算法进行排序,在最坏情况下所需的比较次数是(D),在最好情况下所需的比较次数是(A)。
A. n-1
B. n+1
C. n/2
D. n(n-1)/2

解析:待排序表为反序时,直接插入排序需要进行n(n-1)/2次比较(从前往后依次需要比较1,2,..,m-1次);待排序表为正序时,只需进行n-1次比较

05.数据序列{8,10,13,4,6,7,22,2,3}只能是( C )两趟排序后的结果。
A.简单选择排序
B.冒泡排序
C.直接插入排序
D.堆排序

解析:冒泡排序和选择排序经过两趟排序后,应该有两个最大(或最小)元素放在其最终位置,入排序经过两趟排序后,前三个元素应该是局部有序的,只可能是插入排序。

06.用直接插入排序算法对下列4个表进行(从小到大)排序,比较次数最少的是( B ).
A.94,32,40,90,80,46,21,69
B.21,32,46,40,80,69,90,94
C.32,40,21,46,69,94,90,80
D. 90,69,80,46,21,32,94, 40

解析:越接近正序的序列,直接插入排序的比较次数就越少,B和C是比较接近正序的,然后分别判断两个序列的比较次数。以B为例,第一趟,插入32,比较1次;第二趟,插入46,比较1次;第三趟,插入40,因为40 比46小但比32大,所以比较2次;第四趟,插入80,比较1次;第五趟,插入69,比较2次;以此类推,共比较9次。同理求出C的比较次数为11次。所以选B项。

07.在下列算法中,( C )算法可能出现下列情况:在最后一趟开始之前,所有元素都不在最终位置上。
A.堆排序
B.冒泡排序
C.直接插入排序
D.快速排序

解析:在直接插入排序中,若待排序列中的最后一个元素应插入表中的第一个位置,则前面的有序子序列中的所有元素都不在最终位置上。

08.希尔排序属于(A).
A.插入排序
B.交换排序
C.选择排序
D.归并排序

解析:希尔排序是对直接插入排序算法改进后提出来的,本质上仍属于插入排序的范畴。

09.对序列{15,9,7,8,20,-1,4}采用希尔排序,经一趟后序列变为{15,-1,4,8,20,9,7},则该次采用的增量是( B )。
A.1
B.4
C.3
D.2

解析:希尔排序将序列分为若干组,记录只在组内进行交换。由观察可知,经过一趟后9和-1交换,7和4交换,可知增量为4。

10.若序列{15,9,7,8,20,-1,4}经一趟排序后变成{9,15,7,8,20,-1,4},则采用的是(C)方法。
A.选择排序
B.快速排序
C.直接插入排序
D.冒泡排序

解析:前两个元素已经局部有序,很明显一趟直接插入排序算法有效

11.对序列{98,36,-9,0,47,23,1,8,10,7}采用希尔排序,下列序列(A)是增量为4的一趟排序结果。
A.{10,7,-9,0,47,23,1,8,98,36}
B.{-9,0,36, 98,1,8,23,47,7,10}
C. {36,98,-9,0,23,47,1,8,7,10}
D.以上都不对

解析:增量为4意味着所有相距为4的记录构成一组,然后在组内进行直接插入排序,经观察,只有A项满足要求

12.对序列{E,A,S,Y, Q,U,E,S,T,I,O,N}按照字典顺序排序,采用增量d=6,3,1的希尔排序算法。则前两趟排序后,关键字的总比较次数为(B)
A.15
B.17
C.16
D.18

解析:第一趟:EE为一组,比较;AS为一组,比较;ST为一组,比较;YI为一组,比较后交换;QO为一组,比较后交换;UN为一组,比较后交换,结果为EASIONESTYQU。第二趟:EIEY为一组,用直接插入排序需要依次比较I和E、E和I、E和E、Y和I;AOSQ为一组,依次比较O和A,S和O、Q和S、Q和O;SNTU为一组,依次比较N和S、T和S、U和T。第一趟比较次数为6,第二次比较次数为11,总比较次数为17

13.已知输入序列{13,24,7,1,8,9,11,56,34,51,2,77,5},增量序列d=5,3,1,采用希尔排序算法进行排序,则两趟排序后的结果为( B ).
A.1,7,8,9,13,24,11, 34,51,2,5,56,77
B. 1,7,5,2,8,9,24,11,34,51,13,77,56
C. 2,11,5,1,8,9,24,7,34,51,13,77,56
D.2,5,11,1,8,9,7,24,34,13,51, 77,56

解析:第一趟增量d=5,第一趟排序后,结果为2,11,5,1,8,9,24,7,34,51,13,77,56。第二趟增量d=3,第二趟排序后,结果为1,7,5,2,8,9,24,11,34,51,13,77,56。

14.折半插入排序算法的时间复杂度为( C ).
A.O(n)
B. O(nlog2n)
C. O(n^2)
D.O(n^3)

解析:虽然折半插入排序是对直接插入排序的改进,但它改进的只是比较的次数,而移动次数未发生变化,时间复杂度仍未O(n^2)

15.有些排序算法在每趟排序过程中,都会有一个元素被放置到其最终位置上,(A)算法不
会出现此种情况。
A.希尔排序
B.堆排序
C.冒泡排序
D.快速排序

解析:因为希尔排序是基于插入排序算法提出的,所以它不一定在每趟排序过程后将某一元素放置到最终位置上。

16.以下排序算法中,不稳定的是( C )。
A.冒泡排序
B.直接插入排序
C.希尔排序
D.归并排序

解析:希尔排序是一种复杂的插入排序算法,它是一种不稳定的排序算法

17.以下排序算法中,稳定的是(C ).
A,快速排序
B.堆排序
C.直接插入排序
D.简单选择排序

解析:基于插入、交换、选择的三类排序算法中,通常简单方法是稳定的(直接插入、折半插入、冒泡),但有一个例外就是简单选择,复杂方法都是不稳定的(希尔排序、快速排序、堆排序)

18.【2012统考真题】对同一待排序序列分别进行折半插入排序和直接插入排序,两者之间
可能的不同之处是(D)
A.排序的总趟数
B.元素的移动次数
C.使用辅助空间的数量
D.元素之间的比较次数

解析:折半插入排序与直接插入排序都将待插入元素插入前面的有序子表,区别是:确定当前记录在前面有序子表中的位置时,直接插入排序采用顺序查找法,而折半插入排序采用折半查找法。排序的总趟数取决于元素个数n,两者都是n-1趟。元素的移动次数都取决于初始序列,两者相同。使用辅助空间的数量也都是O(1)。折半插入排序的比较次数与序列初态无关,时间复杂度为为O(nlog2n);而直接插入排序的比较次数与序列初态有关,时间复杂度为O(n)~O(n^2)。

19.【2014统考真题】用希尔排序算法对一个数据序列进行排序时,若第一趟排序结果为9,1,
4,13,7,8,20,23,15,则该趟排序采用的增量(间隔)可能是(
B )。
A.2
B.3
C.4
D.5

解析:第二个元素为1,是整个序列中的最小元素,可知该希尔排序为从小到大排序。然后考虑增量问题,若增量为2,则第1+2个元素4明显比第1个元素9要小,排除A。若增量为3,则第i,i+3,i+6(i=1,2,3)个元素都为有序序列,符合希尔排序的特点。若增量为4,则第1个元素9比第1+4个元素7要大,排除C。若增量为5,则第1个元素9要比第1+5个元素8要大,排除D。

20.【2015统考真题】希尔排序的组内排序采用的是(A).
A.直接插入排序
B.折半插入排序
C.快速排序
D.归并排序

解析:希尔排序的思想是:先将待排元素序列分割成若干子序列(由相隔某个“增量”的元素组成),分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。

21.【2018统考真题】对初始数据序列(8,3,9,11,2,1,4,7,5,10,6)进行希尔排序。若第一趟排
序结果为(1,3,7,5,2,6,4,9,11,10,8),第二趟排序结果为(1,2,6,4,3,7,5,8,11,10,9),则两趟排序采用的增量(间隔)依次是( D ).
A.3,1
B.3,2
C.5,2
D.5,3

解析:第一趟分组:8,1,6;3,4;9,7;11,5;2,10;间隔为5,排序后组内递增。
第二趟分组:1,5,4,10;3,2,9,8;7,6,11;间隔为3,排序后组内递增。

8.3

01.对n个不同的元素利用冒泡法从小到大排序,在(A )情况下元素交换的次数最多。
A.从大到小排列好的
B.从小到大排列好的
C.元素无序
D.元素基本有序
解析:冒泡排序最少进行1趟冒泡,最多进行n-1趟冒泡。初始序列为逆序时,需进行n-1趟冒泡,并且元素交换的次数最多。初始序列为正序时,进行1趟冒泡(无交换)就可结束算法。

02.若用冒泡排序算法对序列{10,14, 26,29,41,52}从大到小排序,则需进行( C )次比较。
A.3
B.10
C.15
D.25
解析:冒泡排序始终在调整“逆序”,因此交换次数为排列中逆序的个数,对逆序序列进行冒泡排序,每个元素向后调整时都需要进行比较,因此共需要比较5+4+3+2+1=15次

03.用某种排序算法对线性表{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,84
则所采用的排序算法是( D )。
A.选择排序
B.插入排序
C.二路归并排序
D.快速排序
解析:选择排序在每趟排序结束后可以确定一个元素的最终位置,不对。插入排序,第i趟后前i+1个元素应该是有序的,不对。第二趟{20,15}和{21,25}是反序的,因此不是归并排序。快速排序每趟将基准元素放在其最终位置,然后以它为基准将序列划分为两个子序列。

04.一组记录的关键码为(46, 79,56,38,40,84),则利用快速排序算法,以第一个记录为基准,从小到大得到的一次划分结果为(C).
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)
解析:以46为基准元素,首先从后往前扫描比46小的元素,并与之进行交换,而从前往后扫描比46大的元素并将46与该元素交换,得到{40,46,56,38,79,84}.此后重复从后往前扫描与从前往后扫描交换的操作。直到46处于最终位置。

05.快速排序算法在(D)情况下最不利于发挥其长处。
A.要排序的数据量太大
B.要排序的数据中含有多个相同值
C.要排序的数据个数为奇数
D.要排序的数据已基本有序
解析:当待排序数据基本为有序是,每次选取第n个元素为基准,会导致划分区间分配不均匀,不利于发挥快速排序的优势,相反,当待排序数据分布比较随机时,基准元素能将序列划分为两个长度大致相等的序列,这时才能发挥快速排序的有优势。

06.就平均性能而言,目前最好的内部排序算法是(D).
A.冒泡排序
B.直接插入排序
C.希尔排序
D.快速排序
解析:平均性能。A、B的平均性能都会达到O(n^2),而希尔排序虽然大大降低了直接插入排序的时间复杂度,但其平均性能不如快速排序。另外,虽然众多排序算法的平均时间复杂度也是O(nlog2n),但快速排序算法的常数因子是最小的。

07.数据序列F={2,1,4,9,8,10,6,20}只能是下列排序算法中的(A)两趟排序后的结果。
A.快速排序
B.冒泡排序
C.选择排序
D.插入排序
解析:冒泡排序和选择排序经过两趟排序后应该有两个元素处于最终位置(最左/最右),可无论是从大到小还是从小到大排序,数据序列中都没有两个满足这样的条件的元素。若为插入排序,则前三个元素应该是有序的,显然不对。只有快速排序可能是这样。

08.对数据序列{8,9,10,4,5,6,20,1,2}采用冒泡排序(从后往前次序进行,要求升序),需要进行的趟数至少是( C ).
A. 3
B.4
C.5
D. 8
解析:从后往前的冒泡过程为:第一趟{1,8,9,10,4,5,6,20,2},第二趟{1,2,9,10,4,5,6,20},第三趟{1,2,4,8,9,10,5,6,20},第四趟{1,2,4,5,8,9,10,6,20},第五趟{1,2,4,5,6,8,9,10,20},经过五趟排序后序列有序,因此最少五趟即可。

09.双向冒泡排序是指对一个序列在正反两个方向交替进行扫描,第一趟把最大值放在序列的最右端,第二趟把最小值放在序列的最左端,之后在缩小的范围内进行同样的扫描,放在次右端、次左端,直至序列有序。对数组{4,7,8,3,5,6,10,9,1,2}进行双向冒泡排序,则排序趟数是(B).(第一趟从左往右开始,从左往右或从右往左都称为一趟。)
A.7
B.6
C.8
D.9
解析:第一趟从左往右排序的结果为{4,7,3,5,6,8,9,1,2,10},第二趟从右往左的排序结果为:{1,4,7,3,5,6,8,9,2,10},第三趟从左往右:{1,4,3,5,6,7,8,2,9,10},第四趟从右往左{1,2,4,3,5,6,7,8,9,10},第五趟从左往右{1,2,3,4,5,6,7,8,9,10}此时序列已有序。

10.对下列关键字序列用快速排序进行排序时,每次选取的基准元素都为待处理序列的第一个元素,速度最快的情形是(A),速度最慢的情形是(D).
A. {21,25,5,17,9,23,30}
B.{25,23,30,17,21,5,9}
C. {21,9,17,30,25,23,5}
D.{5,9,17,21,23,25,30}
解析:当每趟的枢轴值都把表等分为长度相近的两个子表时,速度是最快的,当表本身已经有序或逆序时,速度最慢。选项D中的序列已按关键字排好序,因此它是最慢的。而选项A中第一趟枢轴值21将表划分为两个子表{9,5,17}和{25,23,30},而后对两个子表划分时,枢轴值在此将他们等分,所以该序列是快速排序最优的情况,速度最快。

11.对下列4个序列,以第一个关键字为基准用快速排序算法进行排序,在第一趟过程中移动记录次数最多的是(B)。
A. 92,96,88,42,30,35,110,100
B. 92,96,100,110,42,35,30,88
C.100,96,92,35,30,110,88,42
D. 42,30,35,92,100,96,88,110
解析:以第一个关键字为基准进行快速排序。A选项,枢轴值为92,35移动到第一个位置,96移动到第6个位置,30移动到第二个位置,再将枢轴值移动到30所在的单元,即第五个位置。最终排序为35,30,88,42,92,96,110,100.所以A选项移动次数为4.同样可以分析除B项序列的移动次数为8,C项序列的移动次数为4,D项序列的移动次数为2.

12.下列序列中,(C)可能是执行第一趟快速排序后所得到的序列(按从大到小排序和从小到大排序来分别讨论)
l {68,11,18,69,23,93,73}
II. {68,11,69,23,18,93,73}
Ⅲ. {93,73,68,11,69,23,18}
lV. {68,11,69,23,18,73,93}
A.I、IV
B.II、Ⅲ
C.Ⅲ、IV
D.只有IV
解析:若按从大到小排序,则最终有序序列为{11,18,23,68,69,73,93},若按从大到小排序,则最红有序的序列是{93,73,69,68,23,18,11}。对比可知选项Ⅰ、Ⅱ中没有处于最终位置的元素,所以Ⅰ、Ⅱ项都不可能,Ⅲ中73和93处于从大到小排序后的最终位置,Ⅳ中73和93处于从小到大排序后的最终位置,因此是有可能的。

13.对n个关键字进行快速排序,最大递归深度为(B),最小递归深度为(C).
A.1
B. n
C. log2n
D. nlog2n
解析:快速排序过程构成应该递归树,递归深度即递归树的高度。枢轴值每次都将子表等分时,递归树的高为log2n,枢轴值每次都是子表的最大值或最小值是,递归树退化为单链表,树高为n。

14.对8个元素的序列进行快速排序,在最好情况下的关键字比较次数是(A).
A.7
B.8
C.12
D.13
解析:快速排序的最好情况是每次划分将待排序列划分为等长的两部分。因此,第一趟将第1个元素与后面的7个元素进行比较,将原序列划分为长度为3和4的两个子表,比较7次;第二趟对两个子表进行划分,将长度为3的子表划分为长度为1的两个子表(不用继续划分),比较2次,将长度为4的子表划分为长度为1和2的两个子表,比较3次;第三趟将长度为2的子表划分为长度为1的子表,比较1次。至此,排序结束,共进行的比较次数是7+2+3+1= 13。

15.【2010统考真题】采用递归方式对顺序表进行快速排序。下列关于递归次数的叙述中,正确的是(D).
A.递归次数与初始数据的排列次序无关
B.每次划分后,先处理较长的分区可以减少递归次数
C.每次划分后,先处理较短的分区可以减少递归次数
D.递归次数与每次划分后得到的分区的处理顺序无关
解析:快速排序的递归次数与元素的初始排序有关。若每次划分后分区比较平衡,则递归次数少,若划分后分区不平衡,则递归次数多。递归次数与分区处理顺序无关。

16.【2011统考真题】为实现快速排序算法,待排序序列宜采用的存储方式是( A )
A.顺序存储                        B.散列存储                        C.链式存储                D.索引存储
解析:对于绝大部分内部排序而言,只适用于顺序存储结构。快速排序在排序的过程中,既要从后往前查找,也要从前往后查找,因此宜采用顺序存储。

17.【2014统考真题】下列选项中,不可能是快速排序第二趟排序结果的是(C ).
A.2,3,5,4,6,7,9
B.2,7,5,6,4,3,9
C.3,2,5,4,7,6,9
D.4,2,3,5,7,6,9

18.【2019统考真题】排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列中,不可能是快速排序第二趟结果的是(D).⭐
A. 5,2,16,12,28,60,32,72
B.2,16,5,28,12,60,32,72
C. 2,12,16,5,28,32,72,60
D. 5,2,12,28,16,32,72,60

19.【2023统考真题】使用快速排序算法对数据进行升序排序,若经过一次划分后得到的数据序列是68,11,70,23,80,77,48,81,93,88,则该次划分的枢轴是(D).
A.11
B.70
C.80
D. 81
解析:最终序列为:11,23,48,68,70,77,80,81,88,93
           当前序列为:68,11,70,23,80,77,48,81,93,88,枢轴会出现在两个序列的相同位置,只有77和81相同,但77左边有比他大的元素80,所以77不是枢轴,而81左边都是比他小的元素,右边都是比他大的元素,因此81是枢轴。

 

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值