在n个元素的数组中,第一个n-(根)n元素被排序,我们必须对数组进行排序

时间:2014-02-04 09:24:52

标签: c arrays algorithm sorting

我们给出了一个n个整数的数组,其中第一个n-(squareroot)n个元素被排序(它表示(根)n个元素来自最后一个元素未被排序)。我们必须以最小的时间复杂度对整个阵列进行排序。可能是什么复杂性?我们的方法是什么?当我试图解决它时,我的复杂性是O(n),首先对剩余的数组进行排序并合并它。是否有任何算法用小于O(n)来解决它?

1 个答案:

答案 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)

更好