5 python arrays sorting algorithm data-structures
我有一个 n 元素数组。除了4?n它们之外的所有元素都被排序。我们不知道这些错位元素的位置。对此列表进行排序的最有效方法是什么?
有没有 O(n) 的方法来做到这一点?
更新 1:
的时间复杂度?对于几乎排序的数据,插入排序是 O(n)(在最坏的情况下是真的吗?)?
有一种对几乎已排序的数组进行排序的快速通用方法:
从头到尾扫描原始数组。如果您发现两个项目的顺序不正确,请将它们移到第二个数组中,然后从第一个数组中删除它们。当心; 例如,如果您删除 x2 和 x3,那么您需要再次检查 x1 ? x2。这是在 O(n) 时间内完成的。在您的情况下,新数组的大小最多为 8sqrt(n)。
对第二个数组进行排序,然后合并两个数组。由于第二个数组的项数较少,任何合理的排序算法都会在O(n)中对较小的第二个数组进行排序,合并又需要O(n),所以总时间为O(n)。
如果使用 O(n log n) 算法对第二个数组进行排序,那么只要错误位置的项数最多为 O(n / log n),排序就是 O(n)。
| 归档时间: |
|
| 查看次数: |
825 次 |
| 最近记录: |