牛客网查找类型+排序的选择题---手记2

1、假设你只有100Mb的内存,需要对1Gb的数据进行排序,最合适的算法是()
归并排序
外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。一般用归并排序, 空间复杂度是O(n). 一般来说外排序分为两个步骤:预处理和合并排序。首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长度为t的子文件(或段);其次,利用内部排序的方法,对每个子文件的t个纪录进行内部排序。这些经过排序的子文件(段)通常称为顺串(run),顺串生成后即将其写入外存。这样在外存上就得到了m个顺串(m=[n/t])。最后,对这些顺串进行归并,使顺串的长度逐渐增大,直到所有的待排序的几率成为一个顺串为止。
2、下列的排序算法中,初始数据集的排列顺序对算法的性能无影响的是()
一堆(堆排序)海归(归并排序)找朋友
3、基于比较方法的n个数据的内部排序。最坏情况下的时间复杂度能达到的最好下界是() O(nlogn)
基于比较的排序算法有:(1)直接插入排序;(2)冒泡排序;(3)简单选择排序;(4)希尔排序;(5)快速排序;(6)堆排序;(7)归并排序。
分配式排序:基数排序、桶排序
注意是 基于比较 的排序,算法导论中有给出证明,基于比较的排序的算法最坏时间复杂度下界为nlogn。
算法复杂度的上界是大的也就是坏情况的下界是小的也就是好情况的。 而最坏情况的最优下界的意思就是,最坏情况下这些算法中的时间复杂度最小的。最坏情况下,最好的是堆排序和归并排序o(nlogn)。(与数列的初始位置无关)
4、基于比较的排序的时间复杂度下限是多少?O(nlogn)
基于比较的排序算法是不能突破O(NlogN)的。简单证明如下:
N个数有N!个可能的排列情况,也就是说基于比较的排序算法的判定树有N!个叶子结点,比较次数至少为log(N!)=O(NlogN)(斯特林公式)。
5、当数据序列有序时,快速排序的时间复杂度达到最坏的情况O(n^2)。
6、有字符序列(Q,H,C,Y,P,A,M,N,R,D,F,X),新序列(M,H,C,D,F,A,Q,N,R,Y,P,X)是下列()排序算法一趟扫描结果。 步长为6的希尔排序
7、现有一数列{3, 2, 5, 7, 6, 8},要求按升序排序,下面说法正确的是:
快速排序:选择最后一个元素为基,第一遍需要5次比较,第二趟对8的左侧进行快速排序,需要4次比较,结果使6,7交换,第三次在6的左侧快速排序,需要2系比较,第四次在5的左侧快排,需要1次比较,加起来5+4+2+1=12次。
插入排序:从后向前比较是不是应该: 8-6,比较一次;8-6-7–》8-7-6,比较两次;8-7-6-5,比较一次;8-7-6-5-2,比较一次;8-7-6-5-2-3–》8-7-6-5-3-2,比较两次,总共比较7次。
8、下标从1开始,在含有n个关键字的小根堆(堆顶元素最小)中,关键字最大的记录有可能存储在()位置上。[n/2]+2
解析:给出 1 2 3 4 5 6 7 ,n=7,根据最小堆规则,根要比左右节点小,所以只可能在4 5 6 7 这几个位置上,排除法。
9、拓扑排序运算只能用于()。有向无环图
10、枚举排序,通常也被叫做秩排序,算法基本思想是:对每一个要排序的元素,统计小于它的所有元素的个数,从而得到该元素在整个序列中的位置,时间复杂度为O(n^2)。
11、 折半插入排序算法:在排序中关键字比较次数同记录初始排列无关的。
12、对n个数字进行排序,期中两两不同的数字的个数为k,n远远大于k,而n的取值区间长度超过了内存的大小,时间复杂度最小可以是? O(n)
解析:
先通过hash来获得这k个数,以及每个数对应的个数,然后对k个数进行排序。又因为n远大于k,所以k个数排序复杂度约为1。所以整体复杂度为O(N)。
13、两分法插入排序所需比较次数与待排序记录的初始排列状态相关() 错
14、

猜你喜欢

转载自blog.csdn.net/csdnlijingran/article/details/83572945