500个数字的最快简单排序算法(快速排序/合并排序除外)是什么?

时间:2014-05-02 10:04:05

标签: algorithm sorting

我想实现一些足够快的排序算法,可以多次排序500个数字(例如每次排序500个数字的300次迭代)

我不喜欢快速排序,合并排序,因为它们比冒泡排序,选择排序,插入排序更难实现..

只是想知道什么是最好的(简单的实现和一些最佳情况复杂度小于O(N 2 ),如果已经排序了很多数字)这种情况下最简单的排序算法

要排序的数字是双打的类型。

2 个答案:

答案 0 :(得分:4)

我曾经比较过一些sorting algorithms。 我发现梳子排序堆排序非常容易实现,并且效果非常好。

void comb_sort(double *a, int size) {
    int gap = size;
    bool swapped = false;
     while ((gap > 1) || swapped) {
        if (gap > 1) gap = int(gap/1.247330950103979);
        swapped = false;
        for (int i = 0; gap + i < size; i++)
        if (a[i + gap] < a[i]) {
           swap(&a[i + gap], &a[i]);
           swapped = true;
        }
    }
}

您可以在数据集上分析多种算法,并根据需要选择最佳算法。

编辑为梳子排序添加magic number I used的计算。几年前我在一本书(我不记得了)中找到了这个。

答案 1 :(得分:1)

您可以使用基数排序,即O(kn),其中k是一个常量,以O(n^k)方式限制数据大小与输入大小的关系。虽然这种排序通常使用整数来完成,但稍微修改允许它用于双精度,如此stackoverflow文章中所述:

Radix sort for doubles