在C中使用快速排序以反向排序(降序)?

时间:2011-11-13 23:24:59

标签: c arrays sorting data-structures

我要打电话给qsort(myArray,100,sizeof(int), comp)

int comp(const int * a, const int * b)
if(a==b)
{
    return 0;
}
else
{
    if(a<b)
    {
        return -1;
    }
    else
    {
        return 1;
    }
}

首先, 当我对数组(9,8,7,6,5,4,3,2,1,1),进行排序时,我得到(4,8,7,6,5,9,3,2,1) - 这并没有真正有效。

其次, 我怎么会朝另一个方向排序?我需要通过qsort的特殊标志吗?

3 个答案:

答案 0 :(得分:7)

更改比较功能,以便按照您喜欢的方式进行排序。

比较函数接受指向比较数据的指针(不是数据本身)。例如

int compare (const void* p1, const void* p2)
{ 
   int i1 = *(int*) p1;
   int i2 = *(int*) p2;
   if (i1 < i2) return -1;
   else if (i1 == i2) return 0;
   else return 1;
   /* or simply: return i1 - i2; */
 }

答案 1 :(得分:6)

您需要比较值,而不是它们的地址。尝试

int comp(const int * a, const int * b)
{
 return *a - *b;
}

要撤销订购,请使用

int comp(const int * a, const int * b)
{
 return *b - *a;
}

答案 2 :(得分:2)

您的比较器坏了。您正在比较指针值而不是指向的值。将*取消引用运算符添加到ab比较中,它应该可以正常工作。