如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快
A.起泡排序
B.快速排序
C.希尔排序
D.堆排序
正确答案是 D
构造堆为线性时间,取前5为5 * log2(1000)时间。
太好了,明了易懂,感谢
注意,是“第5个最小元素之前的部分排序”,果断构造小顶堆啊,快排是把所有的数都排序了,有点不符题意,而且不稳定。
限定了1000和5的之后,是不是要看具体的比较和交换次数?
堆排序复杂度是1000*log(5),需要构造的是5个结点的大顶堆,之后遍历数组,如果数组中的数小于堆顶,那么赋值给堆顶,并且调整大顶堆,这个操作复杂度是log(5)。当然还需要从堆结构中不断取出堆顶元素然后调整堆,这个操作时间复杂度相比之下低很多。
题目有歧义吧,“第5个最小元素之前的部分排序的序列 ”指的是原序列排序吗,还是用排序算法增序排列后钱4个最小值序列
可以构建一个大小为k(k为前k个数)的小顶堆,线性扫描整个序列O(n),如果值小于小顶堆的堆顶元素,则不做处理;如果大于堆顶元素,用这个值替换堆顶元素,并更新小顶堆O(log k),所以复杂度为O(n * log k),接近线性。
希尔排序( O(n^1.5) 即 O(1000^1.5) )、快排( O(nlogn) 即 O(1000log1000) )不到最后不能确定顺序。简单选择排序需要比较n-1、n-2、n-3、...、n-5次。复杂度为O(5n)即 O(5000)冒泡排序 与简单选择排序相同。堆排序 O( 1000log5 ) 分析如下:构造包含5个元素的大顶堆。然后将后续的995个元素依次插入大顶堆(插入规则为与堆顶作比较,因为堆顶是当前的堆中的最大元素。若新插入的元素小于堆顶元素则插入,否则该元素不会是最小的5个元素之一,抛弃。)例如: 1 9 5 3 7 3 8 2 11 23 4 6 一共12个元素。1) 取前5个元素构造大顶堆: 9 7 5 3 12)依次插入3、8、2、11、23、4、6.插入3 并调整: 7 3 5 3 1插入8 ,8>7,抛弃插入2 并调整: 5 3 2 3 1插入11、23 ,均大于5抛弃插入4 并调整: 4 3 2 3 1插入6,6>4 抛弃3) 最后,对堆内元素再进行排序。时间复杂度,堆调整过程是O(log5),而整个序列只遍历了一遍,为O(n).总的复杂度为O(nlog5)
终于看到一个详细版啦!真棒
请写出以下代码执行输出:(构造函数、静态块执行顺序)
如何理解PV、UV、IP
某公园内有个奇怪的摊主小周,他只在星期一、星期二、星期三、星期五和星期六工作,而且他只出售4种商品:玩具汽车、充气气球、橡皮泥和遥控飞机。<
cookies,sessionStorage 和 localStorage 的区别?
太好了,明了易懂,感谢
注意,是“第5个最小元素之前的部分排序”,果断构造小顶堆啊,快排是把所有的数都排序了,有点不符题意,而且不稳定。
限定了1000和5的之后,是不是要看具体的比较和交换次数?
堆排序复杂度是1000*log(5),需要构造的是5个结点的大顶堆,之后遍历数组,如果数组中的数小于堆顶,那么赋值给堆顶,并且调整大顶堆,这个操作复杂度是log(5)。当然还需要从堆结构中不断取出堆顶元素然后调整堆,这个操作时间复杂度相比之下低很多。
题目有歧义吧,“第5个最小元素之前的部分排序的序列 ”指的是原序列排序吗,还是用排序算法增序排列后钱4个最小值序列
可以构建一个大小为k(k为前k个数)的小顶堆,线性扫描整个序列O(n),如果值小于小顶堆的堆顶元素,则不做处理;如果大于堆顶元素,用这个值替换堆顶元素,并更新小顶堆O(log k),所以复杂度为O(n * log k),接近线性。
希尔排序( O(n^1.5) 即 O(1000^1.5) )、快排( O(nlogn) 即 O(1000log1000) )不到最后不能确定顺序。
简单选择排序需要比较n-1、n-2、n-3、...、n-5次。复杂度为O(5n)即 O(5000)
冒泡排序 与简单选择排序相同。
堆排序 O( 1000log5 ) 分析如下:
构造包含5个元素的大顶堆。然后将后续的995个元素依次插入大顶堆(插入规则为与堆顶作比较,因为堆顶是当前的堆中的最大元素。若新插入的元素小于堆顶元素则插入,否则该元素不会是最小的5个元素之一,抛弃。)
例如: 1 9 5 3 7 3 8 2 11 23 4 6 一共12个元素。
1) 取前5个元素构造大顶堆: 9
7 5
3 1
2)依次插入3、8、2、11、23、4、6.
插入3 并调整: 7
3 5
3 1
插入8 ,8>7,抛弃
插入2 并调整: 5
3 2
3 1
插入11、23 ,均大于5抛弃
插入4 并调整: 4
3 2
3 1
插入6,6>4 抛弃
3) 最后,对堆内元素再进行排序。
时间复杂度,堆调整过程是O(log5),而整个序列只遍历了一遍,为O(n).
总的复杂度为O(nlog5)