我们给出了一个n个整数的数组,其中第一个n-(squareroot)n个元素被排序(它表示(根)n个元素来自最后一个元素未被排序)。我们必须以最小的时间复杂度对整个阵列进行排序。可能是什么复杂性?我们的方法是什么?当我试图解决它时,我的复杂性是O(n),首先对剩余的数组进行排序并合并它。是否有任何算法用小于O(n)来解决它?
答案 0 :(得分:4)
如果您的“数组”实际上是skip-list,则可以在O(log(n)sqrt(n))
for each element x in reminder:
remove x from skip list (O(1))
find first element smaller then x in sorted part (O(logn))
insert x to the found position (O(1))
复杂性将为sqrt(n)*log(n)
请注意,如果数据是实际数组,则需要将所有元素向右移动以进行单个更改(例如,如果提醒中的某个元素是最小的元素) - 这是单独完成的O(n)
,所以对于数组,你不能比O(n)