数据结构内排序题库

1、已知一组元素的排序码为(46,74,16,53,14,26,40,38,86,65,27,34),利用直接插入排序的方法(第一个数字不用插入),写出第四次向前面有序表插入一个元素后的排列结果。

解析

未插入元素前,排列结果为46 74 16 53 14 26 40 38 86 65 27 34,第一次插入,结果为46 74 16 53 14 26 40 38 86 65 27 34,第二次插入,结果为16 46 74 53 14 26 40 38 86 65 27 34,第三次插入,结果为16 46 53 74 14 26 40 38 86 65 27 34,第四次插入后排列结果为14 16 46 53 74 26 40 38 86 65 27 34

答案: 14 16 46 53 74 26 40 38 86 65 27 34

2、下列排序方法的比较次数与记录的初始排列状态无关的是( )。

 A、直接选择排序

 B、直接插入排序

 C、冒泡排序

 D、快速排序

解析

直接选择排序不管记录初始排列如何,第i趟排序中选出最小关键字的记录都需要比较n-i次,选最小关键字一共需要比较n-1+n-2+...+1=n(n-1)/2 次,还有比较是否需要交换关键字,一共n-1次

3、某整型数组A的10个元素值依次为6,2,9,7,3,8,4,5,0,1,用快速排序方法(课程中介绍的快速排序实现方式),取第一个元素值6作为分割数,将A中元素由小到大排序,写出快速排序第一次分隔后A中的结果()。数字中间用一个空格隔开。

解析

选择轴值并存储轴值;

最后一个元素放到轴值位置;

初始化下标 i, j,分别指向头尾;

i 递增直到遇到比轴值大的元素,将此元素覆盖到j的位置;j 递减直到遇到比轴值小的元素,将此元素覆盖到 i 的位置;

重复上一步直到 i==j,将轴值放到 i 的位置,完毕。

答案: 1 2 0 5 3 4 6 8 7 9

4、在对一组记录(50,40,95,20,15,70,60,45,80)进行从小到大冒泡排序时,第一趟需进行相邻记录的交换的次数为( ),在整个排序过程中共需进行( )趟才可完成。

解析

第一趟需要交换45和60,45和70,15和20,15和95,15和40,15和50,所以共6次,而交换7趟过后,就已经NoSwap==true了,故答案为6 7

答案: 6 7

5、需要对1000个大型的记录进行排序,记录本身存储在外存中,在内存中只保存了所有记录的排序码。排序码之间的比较非常快,但是移动代价很大,因为一旦移动一个排序码,相应的外存中的记录也要移动,将涉及上百个磁盘块的移动,应该使用何种排序方法()

 A、直接选择排序

 B、堆排序

 C、快速排序

 D、插入排序

解析

应该选择直接选择排序,此排序法可以达到尽量少的移动量,虽然比较次数达到N^2,但是相对于外存的处理时间来说,不是关键因素。

6、已知一组元素的排序码为(67, 34, 56, 12, 88, 3, 15, 36, 27, 98, 11, 55),利用自顶向下划分的非优化归并排序方法(划分到小于等于2个元素),写出第二趟二路归并排序后的结果()。中间用一个空格隔开。

解析

分组结果为(67)( 34 56)( 12 )(88 3)( 15 )(36 27)( 98 )(11 55),第一趟二路归并结果应该是(34 56 67 )(3 12 88)( 15 27 36 )(11 55 98),第二趟二路归并结果应该是(3 12 34 56 67 88)( 11 15 27 36 55 98),即答案为3 12 34 56 67 88 11 15 27 36 55 98

答案: 3 12 34 56 67 88 11 15 27 36 55 98

7、排序算法大都是基于数组实现的,大部分的算法也能用链表来实现,但有些特殊的算法不适合线性链表存储,不适合(使算法复杂度增大)链式存储的算法有()

 A、堆排序

 B、shell排序

 C、直接选择排序

 D、插入排序

 E、归并排序

 F、快速排序

解析

堆排序:因为需要随机访问。

shell排序:它是采用增量序列{2k,2k-1,…,2,1},也就是说对每隔n个(n为增量序列的某个数)数字进行排序,这种方法过于依赖数据的位置,用链式存储,实在是很不方便。

直接选择排序:用一个指针维护已排好序的数组末尾(也就是乱序数组开头)就可以了。

插入排序:不需要随机访问,是顺序访问并且移动的,而且移动操作比较多,所以用链表比较合适

归并排序:不需要随机访问,是顺序访问并且合并的,而且移动操作比较多,所以用链表比较合适

快速排序:不需要随机访问,是顺序访问并且移动的,而且移动操作比较多,所以用链表比较合适

8、对初始状态为递增的表按递增顺序排序,最省时间的是( )算法

 A、插入排序

 B、堆排序

 C、快速排序

 D、归并排序

显示解析

如果初始状态递增,插入排序不需要交换,只需要n-1次比较,是最少时间代价的。而堆排序需要建堆,归并排序需要分组排序再合并,都需要数据的移动时间。而快速排序需要的比较次数太多,最小时间代价为Θ(nlog n)

9、下面的排序算法哪些是稳定的()。

 A、插入排序

 B、冒泡排序

 C、归并排序

 D、桶式排序

 E、shell排序

 F、选择排序

 G、堆排序

 H、快速排序

插入排序、冒泡排序、归并排序、桶式排序是稳定的

10、假设数组长度为n (n>=20),基数为r (r>=10),排序码个数为d (d>=3),则采用顺序存储的基数排序的空间复杂度至少为 Θ(________)

未答题

 A、n+r

 B、n

 C、r

 D、n*r

猜你喜欢

转载自blog.csdn.net/wydyd110/article/details/81334125
今日推荐