是否可以通过修改我的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;
}
答案 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。