1 对n个数字进行排序,期中两两不同的数字的个数为k,n远远大于k,而n的取值区间长度超过了内存的大小,时间复杂度最小可以是?
两两不同的数字的个数为k,因为不知道确定的数字范围,桶排序不适合,又因为 n远远大于k, 本题使用hash表来统计,首先获得k个数及其每个数出现的次数,然后对k个数进行排序,排序的 复杂度可忽律不计,实际上就是遍历一遍n个数字,所以本位复杂度为O(n)。
2 已知数组元素基本有序的情况下,下面采用那个算法对数组排序时间复杂度最低()
直接选择排序
堆排序
快速排序
插入排序
3 n个数值选出最大m个数(3<m<n)的最小算法复杂度是
O(n)
O(nlogn)
O(logn)
O(mlogn)
O(nlogm)
O(mn)
(11 5 7 2 3 17)
(11 5 7 2 13 3)
(17 11 7 2 3 5)
(17 11 7 5 3 2)
(17 7 11 3 5 2)
(17 7 11 3 2 5)
------------在排序方法中,元素比较次数与元素的初始排列无关的是()
Shell 排序
归并排序
直接插入排序
选择排序
关于归并可以这么解释。首先归并排序中 merge的任务是把两个有序数组合并为一个有序数组。假设A,和B为两个有序数组,合并为一个有序数组C,最好情况比较n/2次(n为数组C的长度,假设数组A和数组B等长,都为n/2),这种情况的前提条件是数组A中最小的元素比数组B中最大的元素要大。那么只要A[0]和B中所有元素都比较过一遍以后,数组A中的其他元素就不用比较了,所以比较了n/2次。最坏情况元素错落,A[0]和B[0]比,假设得出A[0]以后,A[0]先和B[1]比,B[1]再和A[1]比,A[1]再和B[2]比..........那就是n-1次。不知道自己分析的对不对,还是有点疑惑。我的疑惑是归并算法它的时间复杂度不管最好最坏都是一样的O(nlogn),它和比较次数难道没有关系吗?求大神回答。
n/2和n-1在计算复杂度的时候算作一个数量级n
有关选择排序的叙述中正确的是( )
正确答案 : AD您的答案 : BD
A每扫描一遍数组,只需要一次交换B每扫描一遍数组,需要多次交换C选择排序是稳定的排序方法D空间复杂度为O(1)
1、有关选择排序的叙述正确的有:
(1)每扫描一遍数组,只需要一次交换。
(2)空间复杂度为O(1)。
(3)选择排序是不稳定的排序算法。
2、常见的稳定的排序算法有:
(1)直接插入排序;
(2)冒泡排序;
(3)归并排序;
(4)基数排序。
3、常见的不稳定的排序算法有:
(1)简单选择排序;
(2)希尔排序;
(3)快速排序;
(4)堆排序。
关于堆排序复杂度分析的叙述中正确的是( )
正确答案 : ABCD您的答案 : ACD
A堆排序的时间复杂度为O(nlogn)B整个构建堆的时间复杂度为O(n)C堆排序的空间复杂度为O(1)D堆排序是一种不稳定的排序算法
关于堆排序复杂度分析叙述正确的有:
(1)堆排序的时间复杂度为O(nlogn);
(2)整个构造堆的时间复杂度为O(n);
(3)堆排序的空间复杂度为O(1);
(4)堆排序是一种不稳定的排序算法。