在库中对几乎已排序的书籍进行排序的最佳算法是什么

时间:2015-04-27 12:08:55

标签: algorithm sorting

如果有图书馆所有图书已经排序,除了只有一本图书没有存放在它应该存在的地方。我应该使用哪种算法以最短的时间来对这个库进行排序?目前我认为它将与O(nlogn)合并排序。任何比这更快的算法?

2 个答案:

答案 0 :(得分:2)

  1. 查找图书的位置(索引i) - 线性扫描
  2. 将索引j>i右侧一个地方的所有图书筛选
  3. 将书放在新的自由空间
  4. 这在O(n)中完成,只有2次传递数据,并且可以通过将步骤(1)和(2)组合在一起来优化仅在一次传递中完成。

    另请注意:

    这基本上是使用两个数组进行mergesort,(但是这个变体有额外的O(1)空间):

    1. 原创(排序数组)
    2. 新书(也是排序数组,大小为1)
    3. 由于array(1) - Original已经排序,你可以跳过其中的递归调用,然后直接进入mergesort的合并步骤。

答案 1 :(得分:1)

如果您确定它几乎已经排序,那么插入算法甚至泡泡将是最好的...实际合并不会是最好的,因为它会进行太多的订单检查

看看this gif,它可以帮到你:)