查找
-
当采用分块查找时,数据的组织方式为 (B)
A.数据分成若干块,每块内数据有序
B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块
C. 数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块
D. 数据分成若干块,每块(除最后一块外)中数据个数需相同 -
二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。这种说法( B )。
A.正确 B. 错误
整个子树都要满足。 -
如果要求一个线性表既能较快的查找,又能适应动态变化的要求,则可采用( A )查找法。
A. 分块查找 B. 顺序查找 C. 折半查找 D. 基于属性 -
散列表的平均查找长度( A )。
A. 与处理冲突方法有关而与表的长度无关
B. 与处理冲突方法无关而与表的长度有关
C. 与处理冲突方法有关且与表的长度有关
D. 与处理冲突方法无关且与表的长度无关 -
从具有n个结点的二叉排序树中查找一个元素时,在平均情况下的时间复杂度大致为(C)。
A. (O(n)) B. (O(1)) C. (O(log n)) D. (O(n^2)) -
设哈希表长为14,哈希函数是H(key)=key%11,表中已有数据的关键字为15,38,61,84共四个,
现要将关键字为49的结点加到表中,用二次探测再散列法解决冲突,则放入的位置是(D)
A.8 B.3 C.5 D.9 -
( B )构造的哈希函数肯定不会发生冲突。
.数字分析法 B.直接定址法 C.除留余数法 D.平方取中法
https://blog.csdn.net/liu17234050/article/details/104270709/
排序
9、下列关于排序说法不正确的是(D )。
A、 插入排序、冒泡排序是稳定的
B、 选择排序的时间复杂度为O(n^2)
C、 选择排序、希尔排序、快速排序、堆排序是不稳定的
D、 希尔排序、快速排序、堆排序的时间复杂度为O(nlogn)
解析:
是否稳定看排序后原来相等两数是否会交换位置,
因此,如果不是相邻两数比较交换的往往是不稳定。
shell是O(n^1.3),一般达不到O(nlogn)
-
下列各项关于内部排序与外部排序的说法正确的是(ABC)。
A.与内部排序相比,外部排序待排序数据量大
B.内部排序过程是在计算机内存中进行的
C.外部排序的效率衡量标准是读写外存次数
D.外部排序全过程均不在内存内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程。
外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程。
从概念我们可以清晰的看到二者的区别衡量效率的方法
内部排序:比较次数,也就是时间复杂度
外部排序:IO次数,也就是读写外存的次数排序方法
内部排序:插入排序、快速排序、选择排序、归并排序、基数排序等
外部排序:
先来了解下外部排序的过程吧。
外部排序基本上由两个相对独立的阶段组成。首先,按可用内存大小,将外存上含n个记录的文件分成若干长度为l的子文件或段,依次读入内存并利用有效的内部排序方法对他们进行排序,并将排序后得到的有序子文件重新写入外存,通常称这些有序子文件为归并段;然后,对这些归并段进行逐趟归并,使归并段逐渐由小至大,直至得到整个有序文件为止。 -
对n个记录的线性表进行快速排序,为减少算法的递归深度,以下途述正确的是(A)。
A.每次分区后,先处理较短的部分
B.每次分区后,先处理较长的部分
C.与算法每次分区后的处埋顺序无关
D.以上都不对 -
应用快速排序的分治思想,可以实现一个求第K大数的程序。
假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为( C )。
A.O (n2) B.O (n log n ) C.O (n) D. O (1) -
已知数据表A中每个元素距其最终的位置不远,则采用( B )排序算法最省时间。
A.堆排序
B.插入排序
C.直接选择排序
D.快速排序 -
设关键字序列为(3,7,6,9,7,1,4,5,20),对其进行排序的最小交换次数是
( A )。
A.5 B.6 C.7 D.20
冒泡
- 若某算法的计算时间表示为递推关系式:
T(N) = 2T(N / 2) + N log N
T(1) = 1
则该算法的时间复杂度为( C )。
A. O(N) B. O(N log N) C. O(N log^2 N) D. O(N^2)
带进去算。
-
关键字序列(8,9,10,4,5,6,20,1,2)只能是下列排序算法中( C )的两趟排序后的结果。
A.选择排序 B.冒泡排序 C.插入排序 D.堆排序 -
在对一组关键字序列{70,55,100,15,33,65,50,40,95},进行直接插入排序时,把65插入,需要比较( A )次。
A. 2 B. 4 C. 6 D. 8
是反着扫的。 -
在待排序序列局部有序时,效率最高的排序算法是(B)。
A. 直接选择排序 B. 直接插入排序 C. 快速排序 D.归并排序
是反着扫的。 -
以下排序中,平均比较次数最少的是(B)。
A.插入排序 B. 快速排序 C. 堆排序 D. 冒泡排序 -
若待排序对象序列在排序前已按其排序码递增顺序排列,则采用(A)方法比较次数最少。
A. 直接插入排序 B. 快速排序
C. 归并排序 D. 直接选择排序
是反着扫的。 -
应用快速排序的分治思想,可以实现一个求第K大数的程序。假定不考虑极端的最坏情况,理论上可以实现的最低的算法时间复杂度为(C)。
A.O (n^2) B.O (n log n ) C.O (n) D. O (1) -
下列算法时间复杂度是O(nlogn)的是( BC )
A.基数排序
B.快速排序
C.归并排序
D.希尔排序 -
下列排序中,排序速度与数据的初始排列是否有序没有关系的有( ABC )。
A.直接选择排序 B.基数排序 C.堆排序 D.直接插入排序 -
下列排序算法中( ABCD )算法是不稳定的。
A. 直接选择排序 B. 堆排序
C. Shell排序 D. 快速排序 -
采用任何基于排序码比较的算法,对5个互异的整数进行排序,至少需要( C )次比较。
A. 5 B. 6 C. 7 D. 8
(log(5!)) 向上取整,为7. -
下列关于排序的算法,正确的是(ACD)。
A.不存在这样一个基于排序码比较的算法:它只通过不超过9次排序码的比较,就可以对任何6个排序码互异的数据对象实现排序。
B.如果输入序列已经排好序,则快速排序算法无需移动任何数据对象就可以完成排序。
C.希尔排序的最后一趟就是冒泡排序。 -
堆排序:先层次,然后一个个挪,大根堆找大儿子交换,小根堆找小儿子交换
-
如果只想得到1024个元素组成的序列中的前5个最小元素,那么用(D)方法最快。
A. 冒泡排序 B. 快速排序
C. 直接选择排序 D. 堆排序(nlog k<nk)
-
在含有n个元素的小根堆(堆顶元素最小)中,关键字最大的记录可能存储在(D)位置上。([]表示向下取整)
A.[n/2] B.[n/2]-1
C.1 D.[n/2]+3
可以轻松举例出。
最大的必然在最后一层。
设最后一层如果弄满是 (x) 个,
那么之前的有 (x - 1) 个。
(x-1+y=n)
(x+y=n+1)
(2*yle n+1)
(y le (n + 1)/2)
(y - 1le (n - 1) / 2)
(posin [n - y + 1, n])
(posin[n - (n - 1)/2, n])
(posin[(n+1) / 2, n])
(posin [[n / 2] + 1, n])
证毕。 -
下列算法中( D )算法不具有这样的特性:对某些输入序列,可能不需要移动数据对象即可完成排序。
A. 冒泡排序 B. 希尔排序
C. 快速排序 D. 直接选择排序
?