大多数排序列表的排序算法

时间:2013-08-25 01:33:07

标签: algorithm list sorting sorted

我正在处理文件中的整数列表。我必须使用排序算法按降序对它们进行分类。我熟悉一些排序算法的运行时间,我知道它们的使用是情境性的。所以我的问题是:对于已经90%排序的任何大小的列表,最快的排序算法是什么?(在我的文件中,我有10.000个条目,但其中有9.500个已经排序)。 / p>

谢谢,

3 个答案:

答案 0 :(得分:4)

为Python开发的Timsort算法(现在在Java中使用)具有优化来处理内置的部分排序的“运行”。

答案 1 :(得分:3)

如果您选择自己编码而不是使用语言提供的排序功能,插入排序应该没问题。

  1. 当列表几乎排序时它表现得非常好(虽然它 如果列表几乎已排序,则为O(N ^ 2),内循环 将不会经常执行)
  2. 这很容易实现。
  3. 介绍Insertion Sort的Python实现。

    <强>程序

    def InsertionSort(Array):
        Total = 0
        for i in xrange(1, len(Array)):
            j, I, = i - 1, i
            while j >= 0 and Array[I] > Array[j]:
                Array[I], Array[j] = Array[j], Array[I]
                j, I, Total = j - 1, I - 1, Total + 1
        print "Insertion Sort Total Operations :", Total
    

    <强>输出

    <强>最坏情况下的

    TestArray  = range(1, 11)
    InsertionSort(TestArray)
    Insertion Sort Total Operations : 45
    

    <强> Bestcase

    TestArray  = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    InsertionSort(TestArray)
    Insertion Sort Total Operations : 0
    

    90%排序数组

    TestArray  = [1, 9, 8, 7, 6, 5, 4, 3, 2, 10]
    InsertionSort(TestArray)
    Insertion Sort Total Operations : 17
    

    半排序数组

    TestArray  = [10, 9, 8, 7, 6, 1, 2, 3, 4, 5]
    InsertionSort(TestArray)
    Insertion Sort Total Operations : 10
    

答案 2 :(得分:0)

对于它的std :: sort C ++使用内省排序,其中数组/列表首先使用 quicksort 进行一定深度的递归,然后是 heapsort 。我不知道大约90%,但是heapsort似乎在已排序的阵列/列表上表现良好......所以我建议你尝试一下。