通过修改比较来使qsort稳定吗?

时间:2012-04-23 20:15:11

标签: c++ c sorting qsort stable-sort

  

可能重复:
  Stabilizing the standard library qsort?

是否可以通过修改我的comp op使qsort稳定为整数?那是我的代码。我在大小为5-7的小型阵列上使用它。

static int compare( const void *a, const void *b )
{
    const int A(*(const int*)(a));
    const int B(*(const int*)(b));

    return B - A;
}

3 个答案:

答案 0 :(得分:3)

如果您使用的是C ++,stable_sort函数是稳定的并且具有O(nlogn)性能。

否则,就地快速排序本质上是不稳定的(我相信如此)。然而,使用额外数组来存储信息的普通变体是稳定的。

我使用了至少一个qsort()版本的不稳定版本,因为一旦我发现qsort()stable_sort()为我的机器上的输入案例生成的结果不同

答案 1 :(得分:2)

您不能采用不稳定的排序算法(如quicksort),只需更改比较运算符即可使其稳定。你必须使用稳定的排序算法启动,然后比较无关紧要(只要它在C ++中是严格的弱排序)。

答案 2 :(得分:0)

如果你正在排序的数组真的那么小,那么你可能最好使用另一种排序算法。参见例如答案为:Fast stable sort for small arrays (under 32 or 64 elements)Fast algorithm implementation to sort very small list