我想实现一些排序算法,使其足够快速地对500个数字进行多次排序(例如,每次将500个数字排序300次)。
我不喜欢快速排序、归并排序,因为它们比冒泡排序、选择排序、插入排序等难以实现。
只是想知道,在这种情况下,什么是最好的(简单实现且最好情况下复杂度小于O(N2),如果有许多数字已经排过序,那就更好了)最简单的排序算法。
需要排序的数字是双精度类型。
我想实现一些排序算法,使其足够快速地对500个数字进行多次排序(例如,每次将500个数字排序300次)。
我不喜欢快速排序、归并排序,因为它们比冒泡排序、选择排序、插入排序等难以实现。
只是想知道,在这种情况下,什么是最好的(简单实现且最好情况下复杂度小于O(N2),如果有许多数字已经排过序,那就更好了)最简单的排序算法。
需要排序的数字是双精度类型。
我曾经比较了一些排序算法。 我发现梳排序和堆排序非常容易实现且效果很好。
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;
}
}
}
O(kn)
,其中k是数据大小与输入大小相对于O(n^k)
的常数边界。虽然通常使用整数进行此排序,但稍作修改即可用于双精度浮点数,如在此stackoverflow帖子中提到的那样: