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

Jer*_*Guy 3 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

首先,这并不是真正的工作,当我数组排序(9,8,7,6,5,4,3,2,1,1),我得到的(4,8,7,6,5,9,3,2,1)-不是真的来分类的.

第二,我如何在另一个方向排序?我需要通过qsort的特殊标志吗?

Bas*_*tch 7

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

而compare函数则指向比较数据(而不是数据本身).例如.

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; */
 }
Run Code Online (Sandbox Code Playgroud)


lhf*_*lhf 7

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

int comp(const int * a, const int * b)
{
 return *a - *b;
}
Run Code Online (Sandbox Code Playgroud)

要反转订购,请使用

int comp(const int * a, const int * b)
{
 return *b - *a;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要一个*有效*的花哨的单行比较,你可以做`return (*a &gt; *b) - (*b &gt; *a);` (2认同)