📜  算法|排序|问题5

📅  最后修改于: 2021-06-29 19:12:53             🧑  作者: Mango

给定一个未排序的数组。数组具有以下属性:数组中的每个元素距排序数组中的位置最多k个距离,其中k是小于数组大小的正整数。可以轻松修改哪种排序算法来对该数组进行排序,并且可获得的时间复杂度是多少?
(A)具有时间复杂度O(kn)的插入排序
(B)具有时间复杂度O(nLogk)的堆排序
(C)具有时间复杂度O(kLogk)的快速排序
(D)以时间复杂度O(kLogk)合并排序答案: (B)
说明: 1)首先对数组进行排序,以创建一个具有前k + 1个元素的最小堆,并使用一个单独的数组作为结果数组。
2)因为元素距离原始位置最多k个距离,所以保证最小的元素将在这K + 1个元素中。
3)从min-heap(extract min)中删除最小的元素,并将其放入结果数组。
4)现在,将未排序数组中的另一个元素插入均值堆,现在,第二个最小的元素将在其中,执行min提取并继续此过程,直到未排序数组中没有更多元素为止。最后,使用简单堆排序其余元素

时间复杂度

————————

1)O(k)建立初始最小堆

2)O((nk)logk)剩余元素…

3)0(1)用于提取最小值

因此总体O(k)+ O((nk)logk)+ 0(1)= O(nlogk)
这个问题的测验