第10章 内部排序习题
第十章:内部排序练习题
![第十章:内部排序练习题](https://img.taocdn.com/s3/m/c675003643323968011c928e.png)
第十章:内部排序练习题一、选择题1、下述几种排序方法中,平均查找长度最小的是()。
A、插入排序B、选择排序C、快速排序D、归并排序2、设关键字序列为(3,7,6,9,7,1,4,5,20),对其进行排序的最小交换次数为()。
A、6B、7C、8D、203、下列排序算法中不稳定的有()。
A、直接选择排序B、直接插入排序C、冒泡排序D、二叉排序E、Shell排序F、快速排序G、归并排序H、堆排序I、基数排序4、内部排序多个关键字的文件,最坏情况下最快的排序方法是(),相应的时间复杂度为(),该算法是()排序方法。
A、快速排序B、插入排序C、归并排序D、简单选择排序E、O(nlog2n)F、O(n2)G、O(n2log2n)H、O(n)I、稳定J、不稳定5、对初始状态为递增的表按递增顺序排序,最省时间的是()算法,最费时间的算法是()。
A、堆排序B、快速排序C、插入排序D、归并排序6、下述几种排序方法中,要求内存量最大的是()。
A、插入排序B、选择排序C、快速排序D、归并排序7、在下面的排序方法中,关键字比较的次数与记录的初始排列次序无关的是()。
A、希尔排序B、冒泡排序C、插入排序D、选择排序8、下列排序中,排序速度与数据的初始排列状态没有关系的是()。
A、直接选择排序B、基数排序C、堆排序D、直接插入排序9、若需在O(nlog2n)的时间内完成对数组的排序,且要求排序是稳定的,则可选择的排序方法为()。
A、快速排序B、堆排序C、归并排序D、直接插入排序10、排序方法中,从未排序序列中依次取出元素与已排序序列(初始时为空)中的元素进行比较,将其放入已排序序列正确位置上的方法,称为()。
A、希尔排序B、冒泡排序C、插入排序D、选择排序11、每次把待排序的元素划分为左右两个子区间,其中左区间中元素的关键字均小于等于基准元素的关键字,右区间中元素的关键字均大于基准元素的关键字,则此排序方法为()。
A、堆排序B、快速排序C、冒泡排序D、Shell排序12、排序方法中,从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为()。
第十章内排习题
![第十章内排习题](https://img.taocdn.com/s3/m/3121b4aab0717fd5360cdcee.png)
第十章内部排序一,选择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. 归并排序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 D.A,B,C均不对。
6.在排序算法中每一项都与其它各项进行比较,计算出小于该项的项的个数,以确定该项的位置叫( )A.插入排序 B.枚举排序 C.选择排序 D.交换排序7.就排序算法所用的辅助空间而言,堆排序,快速排序,归并排序的关系是()A.堆排序〈快速排序〈归并排序 B.堆排序〈归并排序〈快速排序C.堆排序〉归并排序〉快速排序 D.堆排序 > 快速排序 > 归并排序8.在下列排序算法中,哪一个算法的时间复杂度与初始排序无关()。
A.直接插入排序 B. 气泡排序 C. 快速排序 D. 直接选择排序9.将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是( ) A.N B.2N-1 C.2N D.N-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)的是( ) 。
数据结构第10章 习题答案
![数据结构第10章 习题答案](https://img.taocdn.com/s3/m/51f34884680203d8ce2f2424.png)
1.下列排序算法中,其中( D )是稳定的。
A. 堆排序,冒泡排序B. 快速排序,堆排序C. 直接选择排序,归并排序D. 归并排序,冒泡排序2.有一组数据(15,9,7,8,20,-1,7,4)用快速排序的划分方法进行一趟划分后数据的排序为 ( A )(按递增序)。
A.下面的B,C,D都不对。
B.9,7,8,4,-1,7,15,20C.20,15,8,9,7,-1,4,7 D. 9,4,7,8,7,-1,15,203.下列排序算法中,在每一趟都能选出一个元素放到其最终位置上,并且其时间性能受数据初始特性影响的是:( B )。
A. 直接插入排序B. 快速排序C. 直接选择排序D. 堆排序4.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用( D )方法最快。
A.起泡排序 B.快速排列 C.Shell排序 D.堆排序 E.简单选择排序5.从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放在已排序序列的合适位置,该排序方法称为( A )排序法。
A. 插入B. 选择C. 希尔D. 二路归并6. 在排序算法中,每次从未排序的记录中挑出最小(或最大)关键码字的记录,加入到已排序记录的末尾,该排序方法是( A )。
A. 选择B. 冒泡C. 插入D. 堆7. 若用冒泡排序方法对序列{10,14,26,29,41,52}从大到小排序,需进行( C )次比较。
A. 3B. 10C. 15D. 258. 对序列{15,9,7,8,20,-1,4,} 用希尔排序方法排序,经一趟后序列变为{15,-l,4,8,20,9,7}则该次采用的增量是 ( B )A. lB. 4C. 3D. 29. 堆排序是( E )类排序A. 插入B. 交换C. 归并D. 基数E. 选择10.排序方法有许多种,(1)法从未排序的序列中依次取出元素,与已排序序列(初始时为空)中的元素作比较,将其放入已排序序列的正确位置上;(2)法从未排序的序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端;交换排序方法是对序列中的元素进行一系列比较,当被比较的两元素逆序时,进行交换;(3)和(4)是基于这类方法的两种排序方法,而(4)是比(3)效率更高的方法;(5)法是基于选择排序的一种排序方法,是完全二叉树结构的一个重要应用。
数据结构教程李春葆课后答案第10章内排序
![数据结构教程李春葆课后答案第10章内排序](https://img.taocdn.com/s3/m/d620e0bdf524ccbff1218451.png)
2 else d=d/3; } }
数据结构教程学习指导
(1)指出fun(a,n)算法的功能。 (2)当a[]={5,1,3,6,2,7,4,8}时,问fun(a,8)共执行几趟排序,各趟的排序 结果是什么? 答:(1)fun(a,n)算法的功能是采用增量递减为1/3的希尔排序方法对a数组中元素进 行递增排序。 (2)当a[]={5,1,3,6,2,7,4,8}时,执行fun(a,8)的过程如下: d=2:2 1 3 6 4 7 5 8 d=1:1 2 3 4 5 6 7 8 共有两趟排序。 4. 在实现快速排序的非递归算法时,可根据基准元素,将待排序序列划分为两个子 序列。若下一趟首先对较短的子序列进行排序,试证明在此做法下,快速排序所需要的栈 的深度为 O(log2n)。 答:由快速排序的算法可知,所需递归工作栈的深度取决于所需划分的最大次数。在 排序过程中每次划分都把整个待排序序列根据基准元素划分为左、右两个子序列,然后对 这两个子序列进行类似的处理。 设S(n)为对n个记录进行快速排序时平均所需栈的深度, 则: S(n)=
KeyType QuickSelect(RecType R[],int s,int t,int k) //在 R[s..t]序列中找第 k 小的元素 { int i=s,j=t; RecType tmp; if (s<t) //区间内至少存在 2 个元素的情况 { tmp=R[s]; //用区间的第 1 个记录作为基准 while (i!=j) //从区间两端交替向中间扫描,直至 i=j 为止 { while (j>i && R[j].key>=tmp.key) j--; //从右向左扫描,找第 1 个关键字小于 tmp 的 R[j] R[i]=R[j]; //将 R[j]前移到 R[i]的位置 while (i<j && R[i].key<=tmp.key) i++; //从左向右扫描,找第 1 个关键字大于 tmp 的 R[i] R[j]=R[i]; //将 R[i]后移到 R[j]的位置 } R[i]=tmp; if (k-1==i) return R[i].key; else if (k-1<i) return QuickSelect(R,s,i-1,k); //在左区间中递归查找 else return QuickSelect(R,i+1,t,k); //在右区间中递&& s==k-1) return R[k-1].key; else return -1; }
第10章 内部排序答案
![第10章 内部排序答案](https://img.taocdn.com/s3/m/fe7f5423bd64783e09122be2.png)
第10章内部排序答案一、填空题1. 大多数排序算法都有两个基本的操作:比较(两个关键字的大小)和移动(记录或改变指向记录的指针)。
2. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置至少需比较3次。
(可约定为,从后向前比较)3. 在插入和选择排序中,若初始数据基本正序,则选用插入排序(到尾部);若初始数据基本反序,则选用选择排序。
4. 在堆排序和快速排序中,若初始记录接近正序或反序,则选用堆排序;若初始记录基本无序,则最好选用快速排序。
5. 对于n个记录的集合进行冒泡排序,在最坏的情况下所需要的时间是O(n2) 。
若对其进行快速排序,在最坏的情况下所需要的时间是O(n2) 。
6. 对于n个记录的集合进行归并排序,所需要的平均时间是O(nlog2n) ,所需要的附加空间是O(n) 。
7.【计研题2000】对于n个记录的表进行2路归并排序,整个归并排序需进行log2n 趟(遍),共计移动n log2n次记录。
(即移动到新表中的总次数!共log2n趟,每趟都要移动n个元素)8.设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,则:冒泡排序一趟扫描的结果是H, C, Q, P, A, M, S, R, D, F, X ,Y;初始步长为4的希尔(shell)排序一趟的结果是P, A, C, S, Q, D, F, X , R, H,M, Y;二路归并排序一趟扫描的结果是H, Q, C, Y,A, P, M, S, D, R, F, X ;快速排序一趟扫描的结果是F, H, C, D, P, A, M, Q, R, S, Y,X;堆排序初始建堆的结果是Y, S, X, R, P, C, M, H, Q, D, F, A。
9. 在堆排序、快速排序和归并排序中,若只从存储空间考虑,则应首先选取堆排序方法,其次选取快速排序方法,最后选取归并排序方法;若只从排序结果的稳定性考虑,则应选取归并排序方法;若只从平均情况下最快考虑,则应选取快速排序方法;若只从最坏情况下最快并且要节省内存考虑,则应选取堆排序方法。
数据结构答案第10章排序学习与指导
![数据结构答案第10章排序学习与指导](https://img.taocdn.com/s3/m/a79dbd8e112de2bd960590c69ec3d5bbfc0ada5a.png)
第10章排序10.1 知识点分析1. 排序根本概念:〔1〕排序将数据元素的任意序列, 重新排列成一个按关键字有序〔递增或递减〕的序列的过程称为排序。
〔2〕排序方法的稳定和不稳定假设对任意的数据元素序列, 使用某个排序方法, 对它按关键字进展排序, 假设对原先具有一样键值元素间的位置关系, 排序前与排序后保持一致, 称此排序方法是稳定的;反之, 那么称为不稳定的。
〔3〕内排序整个排序过程都在内存进展的排序称为内排序, 本书仅讨论内排序。
〔4〕外排序待排序的数据元素量大, 以致内存一次不能包容全部记录, 在排序过程中需要对外存进展访问的排序称为外排序。
2. 直接插入排序直接插入排序法是将一个记录插到已排序好的有序表中, 从而得到一个新的, 记录数增1的有序表。
3. 二分插入排序二分插入排序法是用二分查找法在有序表中找到正确的插入位置, 然后挪动记录, 空出插入位置, 再进展插入的排序方法。
4. 希尔排序希尔排序的根本思想是: 先选取一个小于n的整数d1作为第一个增量, 把待排序的数据分成d1个组, 所有间隔为d1的倍数的记录放在同一个组内, 在各组内进展直接插入排序, 每一趟排序会使数据更接近于有序。
然后, 取第二个增量d2, d2< d1, 重复进展上述分组和排序, 直至所取的增量di=1〔其中di< di-1 < ……< d2< d1〕, 即所有记录在同一组进展直接插入排序后为止。
5. 冒泡排序冒泡法是指每相邻两个记录关键字比大小, 大的记录往下沉〔也可以小的往上浮〕。
每一遍把最后一个下沉的位置记下, 下一遍只需检查比拟到此为止;到所有记录都不发生下沉时, 整个过程完毕。
6. 快速排序快速排序法是通过一趟排序, 将待排序的记录组分割成独立的两局部, 其中前一局部记录的关键字均比枢轴记录的关键字小;后一局部记录的关键字均比枢轴记录的关键字大, 枢轴记录得到了它在整个序列中的最终位置并被存放好。
数据结构第10章习题
![数据结构第10章习题](https://img.taocdn.com/s3/m/64a93145a45177232f60a2ab.png)
三、填空题
1. 设用希尔排序对数组{98,36,-9,0,47,23, 1,8,10,7}进行排序,给出的步长(也称增量 序列)依次是4,2,1则排序需__________趟, 写出第一趟结束后,数组中数据的排列次序 __________。 【南京理工大学 1997 三、5 (2分)】 2.若不考虑基数排序,则在排序过程中,主要进行 的两种基本操作是关键字的______和记录的 _____。 【北京邮电大学 2001 二、7 (4分)】 3.分别采用堆排序,快速排序,冒泡排序和归并排 序,对初态为有序的表,则最省时间的是_____ 算法,最费时间的是______算法。【福州大学 1998 二、10 (2分)】
பைடு நூலகம்
12.就排序算法所用的辅助空间而言,堆排序,快 速排序,归并排序的关系是( a ) A.堆排序〈 快速排序〈归并排序 B.堆排序 〈 归并排序〈 快速排序 C.堆排序〉 归并排序 〉快速排序 D.堆排 序 > 快速排序 > 归并排序 E.以上答案都不 对 【西安交通大学 1996 三、1 (3分)】 13.将两个各有N个元素的有序表归并成一个有序表, 其最少的比较次数是( a ) A.N B.2N-1 C.2N D.N-1
2.比较次数与排序的初始状态无关的排序方法是 ( d )。【北方交通大学 2000 二、2(2分)】
A.直接插入排序 D.简单选择排序 B.起泡排序 C.快速排序
3.数据序列(8,9,10,4,5,6,20,1,2)只能是 下列排序算法中的( c )的两趟排序后的结果。 【合肥工业大学 1999 一、3 (2分)】 A.选择排序 B.冒泡排序 C.插入排序 D.堆排序 4.数据序列(2,1,4,9,8,10,6,20)只能是下 列排序算法中的( a )的两趟排序后的结果。 A. 快速排序 B. 冒泡排序 C. 选择排序 D. 插入排序 5.对序列{15,9,7,8,20,-1,4}进行排序,进行 一趟后数据的排列变为{4,9,-1,8,20,7,15}; 则采用的是( c )排序。【南京理工大学 1998 一、8(2分)】 A. 选择 B. 快速 C. 希尔 D. 冒泡
(严蔚敏)第10章 内部排序 习题答案
![(严蔚敏)第10章 内部排序 习题答案](https://img.taocdn.com/s3/m/bf2e526b011ca300a6c39025.png)
参考程序为: 参考程序为: #include <iostream> using namespace std; //直接插入排序法 直接插入排序法 void InsertSort ( int r[ ], int n ) { for ( int i=2; i<=n; i++ ) if (r[i] < r[i-1]) { r[0] = r[i]; // 复制为监视哨 for ( int j = i-1 ; r[0] < r[j]; j-- ) r[j+1] = r[j]; // 记录后移 r[j+1] = r[0]; // 插入到正确位置 } }
第10章 内部排序 章 习题及答案
一、单项选择题 ( C ) 1. 一组记录的关键码为 ( 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
(1)直接插入排序 ) 1 2 3 初始 [83] 40 63 i=2 [40 83] i=3 [40 63 83] i=4 [13 40 63 i=5 [13 40 63 i=6 [13 35 40 i=7 [13 35 40 i=8 [13 35 40
4 13
5 84
6 35
7 96
8 57
83] 83 63 63 57
三、应用题 1. 已知关键码序列 (83, 40, 63, 13, 84, 35, 96, 57) ) 分别画出用直接插入排序、简单选择排序、 分别画出用直接插入排序、简单选择排序、 直接插入排序 快速排序对上述序列进行操作的各趟结果。 快速排序对上述序列进行操作的各趟结果。 对上述序列进行操作的各趟结果
第十章试题(有答案)
![第十章试题(有答案)](https://img.taocdn.com/s3/m/ca87fcd9240c844769eaeee8.png)
一、填充题1、按排序操作中所涉及的存储器的不同,可以把排序分成和两大类。
内部排序外部排序2、主关键字是可以地标识一个数据元素的关键字。
唯一3、希尔排序是属于插入排序的一种类型,它又被称为排序。
缩小增量4、次关键字是用以标识数据元素的关键字。
多个5、按关键字与排序结果的关系,可以把排序方法分成和两类。
稳定排序非稳定排序6、在直接插入排序、希尔排序、直接选择排序、堆排序、快速排序和基数排序中,需要内存量最大的是。
基数排序7、在堆排序和快速排序中,如果数据元素的原始序列接近正序或反序,则选用最好,如果数据元素的原始序列无序,则最好选用。
堆排序快速排序8、对于由n个数据元素构成的序列实施冒泡排序时,最少的比较次数是。
冒泡排序的结束条件是。
n-1 刚做完的一趟排序没有交换元素9、对于由n个数据元素构成的序列实施冒泡排序时,数据元素的最少交换次数是,此情况说明该数据元素序列是。
0 已按排序要求有序的二、单选题(每题2分,共24分)1、如果采用直接选择排序法来排序一个长度为5,且已按相反顺序排序的数组,共需的比较次数是。
A、1B、15C、8D、10D2、有一组随机数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请根据以上情况,判断所用的排序方法是。
A、直接选择排序B、快速排序C、冒泡排序D、Shall 排序B3、在所有学过的排序方法中,关键字比较次数与记录的初始排列次序无关的是。
A、冒泡排序B、直接选择排序C、直接插入排序D、Shell排序B4、设有1000个无序的数据元素,希望用最快的速度挑选出其中前10个最大的元素,最好选用的排序方法是。
中南大学数据结构与算法第10章内部排序课后作业答案要点
![中南大学数据结构与算法第10章内部排序课后作业答案要点](https://img.taocdn.com/s3/m/4f70e677a45177232f60a27f.png)
第10章内部排序习题练习答案1.以关键字序列(265,301,751,129,937,863,742,694,076,438)为例,分别写出执行以下排序算法的各趟排序结束时,关键字序列的状态。
(1) 直接插入排序(2)希尔排序(3)冒泡排序(4)快速排序(5) 直接选择排序(6) 堆排序(7) 归并排序(8)基数排序上述方法中,哪些是稳定的排序?哪些是非稳定的排序?对不稳定的排序试举出一个不稳定的实例。
答:(1)直接插入排序:(方括号表示无序区)初始态: 265[301 751 129 937 863 742 694 076 438]第一趟:265 301[751 129 937 863 742 694 076 438]第二趟:265 301 751[129 937 863 742 694 076 438]第三趟:129 265 301 751[937 863 742 694 076 438]第四趟:129 265 301 751 937[863 742 694 076 438]第五趟:129 265 301 751 863 937[742 694 076 438]第六趟:129 265 301 742 751 863 937[694 076 438]第七趟:129 265 301 694 742 751 863 937[076 438]第八趟:076 129 265 301 694 742 751 863 937[438]第九趟:076 129 265 301 438 694 742 751 863 937(2)希尔排序(增量为5,3,1)初始态: 265 301 751 129 937 863 742 694 076 438第一趟:265 301 694 076 438 863 742 751 129 937第二趟:076 301 129 265 438 694 742 751 863 937第三趟:076 129 265 301 438 694 742 751 863 937(3)冒泡排序(方括号为无序区)初始态[265 301 751 129 937 863 742 694 076 438]第一趟:076 [265 301 751 129 937 863 742 694 438]第二趟:076 129 [265 301 751 438 937 863 742 694]第三趟:076 129 265 [301 438 694 751 937 863 742]第四趟:076 129 265 301 [438 694 742 751 937 863]第五趟:076 129 265 301 438 [694 742 751 863 937]第六趟:076 129 265 301 438 694 742 751 863 937(4)快速排序:(方括号表示无序区,层表示对应的递归树的层数)初始态:[265 301 751 129 937 863 742 694 076 438]第二层:[076 129] 265 [751 937 863 742 694 301 438] 第三层:076 [129] 265 [438 301 694 742] 751 [863 937] 第四层:076 129 265 [301] 438 [694 742] 751 863 [937] 第五层:076 129 265 301 438 694 [742] 751 863 937第六层:076 129 265 301 438 694 742 751 863 937 (5)直接选择排序:(方括号为无序区)初始态[265 301 751 129 937 863 742 694 076 438]第一趟:076 [301 751 129 937 863 742 694 265 438]第二趟:076 129 [751 301 937 863 742 694 265 438]第三趟:076 129 265[ 301 937 863 742 694 751 438]第四趟:076 129 265 301 [937 863 742 694 751 438]第五趟:076 129 265 301 438 [863 742 694 751 937]第六趟:076 129 265 301 438 694 [742 751 863 937]第七趟:076 129 265 301 438 694 742 [751 863 937]第八趟:076 129 265 301 438 694 742 751 [937 863]第九趟:076 129 265 301 438 694 742 751 863 937(6)堆排序:(通过画二叉树可以一步步得出排序结果)初始态[265 301 751 129 937 863 742 694 076 438]建立初始堆:[937 694 863 265 438 751 742 129 075 301]第一次排序重建堆:[863 694 751 765 438 301 742 129 075] 937第二次排序重建堆:[751 694 742 265 438 301 075 129] 863 937第三次排序重建堆:[742 694 301 265 438 129 075] 751 863 937第四次排序重建堆:[694 438 301 265 075 129] 742 751 863 937第五次排序重建堆:[438 265 301 129 075] 694 742 751 863 937第六次排序重建堆:[301 265 075 129] 438 694 742 751 863 937第七次排序重建堆:[265 129 075] 301 438 694 742 751 863 937第八次排序重建堆:[129 075]265 301 438 694 742 751 863 937第九次排序重建堆:075 129 265 301 438 694 742 751 863 937(7)归并排序(为了表示方便,采用自底向上的归并,方括号为有序区)初始态:[265] [301] [751] [129] [937] [863] [742] [694] [076] [438]第一趟:[265 301] [129 751] [863 937] [694 742] [076 438]第二趟:[129 265 301 751] [694 742 863 937] [076 438]第三趟:[129 265 301 694 742 751 863 937] [076 438]第四趟:[076 129 265 301 438 694 742 751 863 937](8)基数排序(方括号内表示一个箱子共有10个箱子,箱号从0到9)初始态:265 301 751 129 937 863 742 694 076 438第一趟:[] [301 751] [742] [863] [694] [265] [076] [937] [438] [129]第二趟:[301] [] [129] [937 438] [742] [751] [863 265] [076] [] [694]第三趟:[075] [129] [265] [301] [438] [] [694] [742 751] [863] [937]在上面的排序方法中,直接插入排序、冒泡排序、归并排序和基数排序是稳定的,其他排序算法均是不稳定的,现举实例如下:以带*号的表示区别。
数据结构Ch10习题答案
![数据结构Ch10习题答案](https://img.taocdn.com/s3/m/90c94784b9d528ea81c77987.png)
第十章内部排序一、择题1.用直接插入排序法对下面四个表进行(由小到大)排序,比较次数最少的是(B)。
A.(94,32,40,90,80,46,21,69)插32,比2次插40,比2次插90,比2次插80,比3次插46,比4次插21,比7次插69,比4次B.(21,32,46,40,80,69,90,94)插32,比1次插46,比1次插40,比2次插80,比1次插69,比2次插90,比1次插94,比1次C.(32,40,21,46,69,94,90,80)插40,比1次插21,比3次插46,比1次插69,比1次插94,比1次插90,比2次插80,比3次D.(90,69,80,46,21,32,94,40)插69,比2次插80,比2次插46,比4次插21,比5次插32,比5次插94,比1次插40,比6次2.下列排序方法中,哪一个是稳定的排序方法(BD)。
A.希尔排序B.直接选择排序C.堆排序D.冒泡排序下列3题基于如下代码:for(i=2;i<=n;i++){ x=A[i];j=i-1;while(j>0&&A[j]>x){ A[j+1]=A[j];j--;}A[j+1]=x}3.这一段代码所描述的排序方法称作(A)。
A.插入排序B.冒泡排序C.选择排序D.快速排序4.这一段代码所描述的排序方法的平均执行时间为(D)A.O(log2n) B.O(n) C.O(nlog2n) D.O(n2)5.假设这段代码开始执行时,数组A中的元素已经按值的递增次序排好了序,则这段代码的执行时间为(B)。
A.O(log2n) B.O(n) C.O(nlog2n) D.O(n2)6.在快速排序过程中,每次被划分的表(或了表)分成左、右两个子表,考虑这两个子表,下列结论一定正确是(B)。
A.左、右两个子表都已各自排好序B.左边子表中的元素都不大于右边子表中的元素C.左边子表的长度小于右边子表的长度D.左、右两个子表中元素的平均值相等7.对n个记录进行堆排序,最坏情况下的执行时间为(C)。
第10章 内部排序习题
![第10章 内部排序习题](https://img.taocdn.com/s3/m/28d06abf76a20029bd642dbb.png)
第10章内部排序习题一、单项选择题1.若待排序对象序列在排序前已按其排序码递增顺序排列,则采用()方法比较次数最少。
A. 直接插入排序B. 快速排序C. 归并排序D. 直接选择排序2.如果只想得到1024个元素组成的序列中的前5个最小元素,那么用()方法最快。
A. 起泡排序B. 快速排序C. 直接选择排序D. 堆排序3.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。
这样的排序方法是()。
A. 直接选择排序B. 直接插入排序C. 快速排序D. 起泡排序4.对5个不同的数据元素进行直接插入排序,最多需要进行()次比较?A. 8B. 10C. 15D. 255.如果输入序列是已经排好顺序的,则下列算法中()算法最快结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序6.如果输入序列是已经排好顺序的,则下列算法中()算法最慢结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序7.下列排序算法中()算法是不稳定的。
A. 起泡排序B. 直接插入排序C. 基数排序D. 快速排序8.9.采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要()次比较。
A. 5B. 6C. 7D. 810.下列算法中()算法不具有这样的特性:对某些输入序列,可能不需要移动数据对象即可完成排序。
A. 起泡排序B. 希尔排序C. 快速排序D. 直接选择排序11.使用递归的归并排序算法时,为了保证排序过程的时间复杂度不超过O(nlog2n),必须做到()。
A. 每次序列的划分应该在线性时间内完成B. 每次归并的两个子序列长度接近C. 每次归并在线性时间内完成D. 以上全是12.在基于排序码比较的排序算法中,()算法的最坏情况下的时间复杂度不高于O(nlog2n)。
A. 起泡排序B. 希尔排序C. 归并排序D. 快速排序13.一个对象序列的排序码为{ 46, 79, 56, 38, 40, 84 },采用快速排序(以位于最左位置的对象为基准而)得到的第一次划分结果为:A. { 38, 46, 79, 56, 40, 84 }B. { 38, 79, 56, 46, 40, 84 }C. { 40, 38, 46, 79, 56, 84 }D. { 38, 46, 56, 79, 40, 84 }参考答案: 1. A 2. D 3. C 4. B 5. A6. D7. D8. C9. C 10. C11. D 12. C 13. C二、填空题1.第i (i = 1, 2, …, n-1) 趟从参加排序的序列中取出第i个元素,把它插入到由第0个~第i-1个元素组成的有序表中适当的位置,此种排序方法叫做________排序。
内部排序习题
![内部排序习题](https://img.taocdn.com/s3/m/602d18237375a417866f8f2f.png)
第10章内部排序【例10-1】已知关键字序列(12,77,21,65,38,7,38,53),给出采用直接插入排序方法按关键字递增序排列时的每一趟结果。
解:初始1趟2趟3趟4趟5趟6趟7趟(表示有序区)【例10-2】待排序列为(39,80,76,41,13,29,50,78,30,11,100,7,41,86),步长因子分别取5、3、1,给出采用希尔排序方法按关键字递增序排列时的每一趟结果。
解:排序过程如下:p=539 80 76 41 13 29 50 78 30 11 100 7 41 86子序列分别为{39,29,100},{80,50,7},{76,78,41},{41,30,86},{13,11}。
第一趟排序结果:p=3 29 7 41 30 11 39 50 76 41 13 100 80 78 86子序列分别为{29,30,50,13,78},{7,11,76,100,86},{41,39,41,80}。
第二趟排序结果:p=1 13 7 39 29 11 41 30 76 41 50 86 80 78 100此时,序列基本“有序”,对其进行直接插入排序,得到最终结果:7 11 13 29 30 39 41 41 50 76 78 80 86 100【例10-3】已知序列(17,18,60,40,7,32,73,65,85),请给出采用冒泡排序法对该序列作升序排序时的每一趟的结果。
解:初始1趟2趟3趟4趟5趟17 17 17 17 7 718 18 18 7 17 1760 40 7 18 18 1840 7 32 32 32 327 32 40 40 40 4032 60 60 60 60 6073 65 65 65 65 6565 73 73 73 73 7385 85 85 85 85 85(表示有序区)【例10-4】已知关键字序列(38,12,21,77,65,7,38,53)给出采用快速排序方法按关键字增序排序时的第一趟快排过程,并举出一个反例说明快速排序是不稳定排序。
数据结构(c语言版)题集答案——第十章_内部排序
![数据结构(c语言版)题集答案——第十章_内部排序](https://img.taocdn.com/s3/m/7b936b4ac850ad02de804137.png)
k=j/2;
if(H.r[j].key>H.r[k].key)
H.r[j]<->H.r[k];
j=k;
}
}//for
}//Build_Heap
10.35
void TriHeap_Sort(Heap &H)//利用三叉树形式的堆进行排序的算法
{
for(i=H.length/3;i>0;i--)
Heap_Adjust(H,i,H.length);
{
p=0;x=L.r[i].key;
while(L.r[L.r[p].next].keyp=L.r[p].next;
q=L.r[p].next;
L.r[p].next=i;
L.r[i].next=q;
}//for
p=L.r[0].next;
for(i=1;i{
while(pq=L.r[p].next;
L.r[j].key=d[i];
}//BiInsert_Sort
10.25
void SLInsert_Sort(SLList &L)//静态链表的插入排序算法
{
L.r[0].key=0;L.r[0].next=1;
L.r[1].next=0; //建初始循环链表
for(i=2;i<=L.length;i++) //逐个插入
} //交换q和s->next两个结点
}//for
}//LinkedList_Select_Sort
10.34
void Build_Heap(Heap &H,int n)//从低下标到高下标逐个插入建堆的算法
{
for(i=2;i{ //此时从H.r[1]到H.r[i-1]已经是大顶堆
数据库系统l试题库及答案 第10章排序
![数据库系统l试题库及答案 第10章排序](https://img.taocdn.com/s3/m/c999b193aeaad1f346933fc2.png)
第10章排序10.1排序的相关知识一、填空题1.将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的序列叫。
2.大多数排序算法都有两个基本的操作:和。
二、选择题1.()排序算法的稳定性是指()。
A.经过排序后,能使关键字相同的元素保持原顺序中的相对位置不变B.经过排序后,能使关键字相同的元素保持原顺序中的绝对位置不变C.排序算法的性能与被排序元素的个数关系不大D.排序算法的性能与被排序元素的个数关系密切2.()关于排序的以下叙述中,正确的是()。
A.稳定的排序方法优于不稳定的排序方法,因为稳定的排序方法效率高B.对同一个线性表使用不同的排序方法进行排序,得到的排序结果可能不同C.排序方法都是在顺序表上实现的,在链表上无法实现排序方法D.在顺序表上实现的排序方法都可以在链表上实现3.()以下不属于内部排序方法的是()。
A. 选择排序B. 插入排序C. 归并排序D. 拓扑排序10.2插入排序一、填空题1.在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置至少需比较次。
二、选择题:1.()排序方法中,从未排序序列中依次取出元素与已排序序列(初始时空)中的元素进行比较,将其放入已排序序列的正确位置上的方法,称为( )。
A. 希尔排序B. 冒泡排序C. 插入排序D. 选择排序2.()折半插入排序算法的平均情况下的时间复杂度为( )。
A. O(n)B. O(nlog2n)C. O(n2)D. O(n 3)3.()对含有n个元素的顺序表采用直接插入排序方法进行排序,在最坏情况下所需的比较次数是( )。
A.n-1B. n+1C. n/2D. n(n-1)/2三、简答题1.给出关键字序列{4,5,1,2,8,6,7,3,10,9}的直接插入排序过程。
2.给出关键字序列{4,5,1,2,8,6,7,3,10,9}的希尔排序过程(步长分别为5,2,1)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章内部排序习题一、单项选择题1.若待排序对象序列在排序前已按其排序码递增顺序排列,则采用()方法比较次数最少。
A. 直接插入排序B. 快速排序C. 归并排序D. 直接选择排序2.如果只想得到1024个元素组成的序列中的前5个最小元素,那么用()方法最快。
A. 起泡排序B. 快速排序C. 直接选择排序D. 堆排序3.对待排序的元素序列进行划分,将其分为左、右两个子序列,再对两个子序列施加同样的排序操作,直到子序列为空或只剩一个元素为止。
这样的排序方法是()。
A. 直接选择排序B. 直接插入排序C. 快速排序D. 起泡排序4.对5个不同的数据元素进行直接插入排序,最多需要进行()次比较?A. 8B. 10C. 15D. 255.如果输入序列是已经排好顺序的,则下列算法中()算法最快结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序6.如果输入序列是已经排好顺序的,则下列算法中()算法最慢结束?A. 起泡排序B. 直接插入排序C. 直接选择排序D. 快速排序7.下列排序算法中()算法是不稳定的。
A. 起泡排序B. 直接插入排序C. 基数排序D. 快速排序8.9.采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要()次比较。
A. 5B. 6C. 7D. 810.下列算法中()算法不具有这样的特性:对某些输入序列,可能不需要移动数据对象即可完成排序。
A. 起泡排序B. 希尔排序C. 快速排序D. 直接选择排序11.使用递归的归并排序算法时,为了保证排序过程的时间复杂度不超过O(nlog2n),必须做到()。
A. 每次序列的划分应该在线性时间内完成B. 每次归并的两个子序列长度接近C. 每次归并在线性时间内完成D. 以上全是12.在基于排序码比较的排序算法中,()算法的最坏情况下的时间复杂度不高于O(nlog2n)。
A. 起泡排序B. 希尔排序C. 归并排序D. 快速排序13.一个对象序列的排序码为{ 46, 79, 56, 38, 40, 84 },采用快速排序(以位于最左位置的对象为基准而)得到的第一次划分结果为:A. { 38, 46, 79, 56, 40, 84 }B. { 38, 79, 56, 46, 40, 84 }C. { 40, 38, 46, 79, 56, 84 }D. { 38, 46, 56, 79, 40, 84 }参考答案: 1. A 2. D 3. C 4. B 5. A6. D7. D8. C9. C 10. C11. D 12. C 13. C二、填空题1.第i (i = 1, 2, …, n-1) 趟从参加排序的序列中取出第i个元素,把它插入到由第0个~第i-1个元素组成的有序表中适当的位置,此种排序方法叫做________排序。
2.第i (i = 0, 1, …, n-2) 趟从参加排序的序列中第i个~第n-1个元素中挑选出一个最小(大)元素,把它交换到第i个位置,此种排序方法叫做________排序。
3.每次直接或通过基准元素间接比较两个元素,若出现逆序排列,就交换它们的位置,这种排序方法叫做________排序。
4.每次使两个相邻的有序表合并成一个有序表,这种排序方法叫做________排序。
5.在直接选择排序中,排序码比较次数的时间复杂度为O(________)。
6.在直接选择排序中,数据对象移动次数的时间复杂度为O(________)。
7.在堆排序中,对n个对象建立初始堆需要调用________次调整算法。
8.在堆排序中,如果n个对象的初始堆已经建好,那么到排序结束,还需要从堆顶结点出发调用________次调整算法。
9.在堆排序中,对任一个分支结点进行调整运算的时间复杂度为O(________)。
10.对n个数据对象进行堆排序,总的时间复杂度为O(________)。
11.给定一组数据对象的排序码为{ 46, 79, 56, 38, 40, 84 },则利用堆排序方法建立的初始堆(最大堆)为________。
12.快速排序在平均情况下的时间复杂度为O(________)。
13.快速排序在最坏情况下的时间复杂度为O(________)。
14.快速排序在平均情况下的空间复杂度为O(________)。
15.快速排序在最坏情况下的空间复杂度为O(________)。
16.给定一组数据对象的排序码为{46, 79, 56, 38, 40, 84},对其进行一趟快速排序,结果为________。
17.在n个数据对象的二路归并排序中,每趟归并的时间复杂度为O(________)。
18.在n个数据对象的二路归并排序中,整个归并的时间复杂度为O(________)。
参考答案:1. 插入 2. 直接选择 3. 交换4. 两路归并5. n26. n7. ⎣n/2⎦8. n-1 9. log2n10. nlog2n 11. 84, 79, 56, 38, 40, 46 12. nlog2n13. n214. log2n 15. n16. [40 38] 46 [79 56 84] 17. n 18. nlog2n三、判断题1.直接选择排序是一种稳定的排序方法。
2.若将一批杂乱无章的数据按堆结构组织起来, 则堆中各数据是否必然按自小到大的顺序排列起来。
3.当输入序列已经有序时,起泡排序需要的排序码比较次数比快速排序要少。
4.在任何情况下,快速排序需要进行的排序码比较的次数都是O(nlog2n)。
5.在2048 个互不相同的排序码中选择最小的5个排序码,用堆排序比用锦标赛排序更快。
6.若用m个初始归并段参加k路平衡归并排序,则归并趟数应为⎡log2m⎤。
7.堆排序是一种稳定的排序算法。
8.对于某些输入序列,起泡排序算法可以通过线性次数的排序码比较且无需移动数据对象就可以完成排序。
9.如果输入序列已经排好序,则快速排序算法无需移动任何数据对象就可以完成排序。
10.希尔排序的最后一趟就是起泡排序。
11.任何基于排序码比较的算法,对n个数据对象进行排序时,最坏情况下的时间复杂度不会低于O(nlog2n)。
12.不存在这样一个基于排序码比较的算法:它只通过不超过9次排序码的比较,就可以对任何6个排序码互异的数据对象实现排序。
参考答案: 1. 否 2. 否 3. 是 4. 否 5. 否6. 否7. 否8. 是9. 否10. 是11. 是12. 是四、运算题1.判断以下序列是否是小根堆?如果不是, 将它调整为小根堆。
(1) { 100, 86, 48, 73, 35, 39, 42, 57, 66, 21 }(2) { 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 }。
2.在不要求完全排序时,堆排序是一种高效的算法。
这种算法的过程是:(Heapification)把待排序序列看作一棵完全二叉树,通过反复筛选将其调整为堆;(Re-heapification)依次取出堆顶,然后将剩余的记录重新调整为堆。
现考虑序列A = { 23,41,7,5,56 }:(1)给出对应于序列A的小根堆H A(以线性数组表示);(2)给出第一次取出堆顶后,重新调整H A后的结果(以线性数组表示);(3)给出第二次取出堆顶后,重新调整H A后的结果(以线性数组表示)。
3.希尔排序、直接选择排序、快速排序和堆排序是不稳定的排序方法, 试举例说明。
参考答案:1.(1) { 100, 86, 48, 73, 35, 39, 42, 57, 66, 21 }为最大堆。
调整为小根堆后为{ 21, 35, 39, 57, 86, 48, 42, 73, 66, 100 }(2){ 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 }不是最小堆。
调整为小根堆后为{ 12, 24, 33, 65, 33, 56, 48, 92, 86, 70 }2.(1) 建堆结果H A = 5 23 7 41 56(2) 第一次取出堆顶,并重新调整后H A = 7 23 56 41(3) 第二次取出堆顶,并重新调整后H A = 23 41 563.(1) 希尔排序{ 512 275 275* 061 }增量为2{ 275* 061 512 275 }增量为1{ 061 275* 275 512 }(2) 直接选择排序{ 275 275* 512 061 }i = 1{061275* 512 275 }i = 2{061 275* 512 275 }i = 3{061 275* 275512 }(3) 快速排序{ 512 275 275* }{ 275* 275 512}(4) 堆排序{ 275 275* 061 170 }已经是最大堆,交换275与170{ 170 275* 061 275}对前3个调整{ 275* 170 061 275 }前3个最大堆,交换275*与061{ 061 170 275* 275 }对前2个调整{ 170 061 275* 275 }前2个最大堆,交换170与061{ 061 170 275* 275 }。