对部分排序的数组进行排序
Sorting partially sorted array
假设给定一个排序列表,其中包含 n 个元素,后跟 f(n) 个随机排序的元素。如果 (i) f(n) = O(logn),你将如何对列表进行排序。我觉得最好的算法是合并排序,但我不确定由此产生的时间复杂度。
您应该首先使用任何排序方法对 f(n) 个元素进行排序,然后在最后阶段使用归并排序。时间复杂度为 O(n) 因为 O(log(n)2) 可以忽略不计与排序部分的线性扫描相比。
如果 list 你的意思是一个数组,你可以将比较的次数减少到 O(log(n)2) 通过使用二进制搜索查找左侧部分的插入点。它仍然需要 O(n) 复制操作,因此根据复制与比较的相对成本,时间可能会保持 sub-linear,即使 n.
假设给定一个排序列表,其中包含 n 个元素,后跟 f(n) 个随机排序的元素。如果 (i) f(n) = O(logn),你将如何对列表进行排序。我觉得最好的算法是合并排序,但我不确定由此产生的时间复杂度。
您应该首先使用任何排序方法对 f(n) 个元素进行排序,然后在最后阶段使用归并排序。时间复杂度为 O(n) 因为 O(log(n)2) 可以忽略不计与排序部分的线性扫描相比。
如果 list 你的意思是一个数组,你可以将比较的次数减少到 O(log(n)2) 通过使用二进制搜索查找左侧部分的插入点。它仍然需要 O(n) 复制操作,因此根据复制与比较的相对成本,时间可能会保持 sub-linear,即使 n.