1、1第十章 内部排序一,选择 1. 基于比较方法的 n 个数据的内部排序。最坏情况下的时间复杂度能达到的最好下界是( ) 。A. O(nlogn) B. O(logn) C. O(n) D. O(n*n) 2下列排序算法中,其中( )是稳定的。 A. 堆排序,冒泡排序 B. 快速排序,堆排序 C. 直接选择排序,归并排序 D. 归并排序,冒泡排序3若要求排序是稳定的,且关键字为实数,则在下列排序方法中应选( )排序为宜。A直接插入 B直接选择 C堆 D快速 4若需在 O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法是( ) 。A. 快速排序 B. 堆排序 C.
2、归并排序 D. 直接插入排序5. 有一组数据(15,9,7,8,20,-1,7,4) ,用堆排序的筛选方法建立的初始堆为 ( )A-1,4,8,9,20,7,15,7 B-1,7,15,7,4,8,20,9C-1,4,7,8,20,15,7,9 DA,B,C 均不对。 6 在排序算法中每一项都与其它各项进行比较,计算出小于该项的项的个数,以确定该项的位置叫( )A插入排序 B枚举排序 C选择排序 D交换排序7就排序算法所用的辅助空间而言,堆排序,快速排序,归并排序的关系是( )A堆排序 快速排序归并排序 B堆排序 归并排序 快速排序C堆排序 归并排序 快速排序 D堆排序 快速排序 归并排序8在
3、下列排序算法中,哪一个算法的时间复杂度与初始排序无关( ) 。A 直接插入排序 B. 气泡排序 C. 快速排序 D. 直接选择排序9将两个各有 N 个元素的有序表归并成一个有序表,其最少的比较次数是( )AN B2N-1 C2N DN-110一组记录的关键码为(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)11. 在下面的排序方法中,辅助空间为 O(n)的是(
4、 ) 。A希尔排序 B. 堆排序 C. 选择排序 D. 归并排序 12下列排序算法中,在待排序数据已有序时,花费时间反而最多的是( )排序。A 冒泡 B. 希尔 C. 快速 D. 堆 13.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是:( )。A. 直接插入排序 B. 快速排序 C. 直接选择排序 D. 堆排序14. 以下序列不是堆的是( )。A. (100,85,98,77,80,60,82,40,20,10,66) B. B. (100,98,85,82,80,77,66,60,40,20,10)2C. (10,20,40,60,66,77
5、,80,82,85,98,100) D. D. (100,85,40,77,80,60,66,98,82,10,20)15如果只想得到 1000 个元素组成的序列中第 5 个最小元素之前的部分排序的序列,用( )方法最快。A起泡排序 B快速排列 CShell 排序 D堆排序 E简单选择排序1.A 2.D 3.A 4.C 5.C 6.B 7.A 8.D 9.A 10.C11.D 12.C 13.B 14.D 15.D二,判断1当待排序的元素很大时,为了交换元素的位置,移动元素要占用较多的时间,这是影响时间复杂度的主要因素。 ( )2内排序要求数据一定要以顺序方式存储。 ( )3在执行某个排序算法
6、过程中,出现了排序码朝着最终排序序列位置相反方向移动,则该算法是不稳定的。 ( )4直接选择排序算法在最好情况下的时间复杂度为 O(N) 。 ( )5两分法插入排序所需比较次数与待排序记录的初始排列状态相关。 ( )6在初始数据表已经有序时,快速排序算法的时间复杂度为 O(nlog2n )。 ( )7快速排序的速度在所有排序方法中为最快,而且所需附加空间也最少。 ( )8堆肯定是一棵平衡二叉树。 ( )9堆是满二叉树。( )10 (101,88,46,70,34,39,45,58,66,10)是堆。 ( )1. 2. 3. 4. 5. 6. 7. 8. 9.10.三,应用题1. 对下面数据表,
7、写出采用 SHELL 排序算法排序的每一趟的结果,并标出数据移动情况。(125,11,22, 34,15,44,76,66,100,8,14,20,2,5,1) 。2. 给出一组关键字:29,18,25,47,58,12,51,10,分别写出按下列各种排序方法进行排序时的变化过程: (1) 归并排序 每归并一次书写一个次序。 (2) 快速排序 每划分一次书写一个次序。(3) 堆排序 先建成一个堆,然后每从堆顶取下一个元素后,将堆调整一次。 1. 125,11,22,34,15,44,76,66,100,8,14,20,2,5,1设 D=71,11,8,14,15,2,5,66,100,22,3
8、4,20,44,76,125D=31,11,2,5,15,8,14,34,20,22,66,100,44,76,1253D=1 1,2,5,8,11,14,15,20,22,34,44,66,76,100,1252. (1)2 路归并 第一趟:18,29,25,47,12,58,10,51;第二趟:18,25,29,47,10,12,51,58;第三趟:10,12,18,25,29,47,51,58(2)快速排序 第一趟:10,18,25,12,29,58,51,47;第二趟:10,18,25,12,29,47,51,88;第三趟:10,12,18,25,29,47,51,88(3)堆排序 建
9、大堆:58,47,51,29,18,12,25,10;51,47,25,29,18,12,10,58;47,29,25,10,18,12,51,58;29,18,25,10,12,47,51,58;25,18,12,10,29,47,51,58;18,10,12,25,29,47,51,58;12,10,18,25,29,47,51,58;10,12,18,25,29,47,51,58四,算法设计1,试以单链表为存储结构实现简单选择排序的算法。void LinkedList_Select_Sort(LinkedList p-next-next;p=p-next)q=p-next;x=q-data;for(r=q,s=q;r-next;r=r-next) /在 q 后面寻找元素值最小的结点if(r-next-datanext-data;s=r;if(s!=q) /找到了值比 q-data 更小的最小结点 s-nextp-next=s-next;s-next=q;t=q-next;q-next=p-next-next;p-next-next=t; /交换 q 和 s-next 两个结点/for/LinkedList_Select_Sort