Что этот буг когда я программаю по-C using qsort?

У меня бан в английском сайт, поэтому я скажу здесь. Извините мне что я не могу говорить по-русски, а ещё хочу сказать об этом буг кому-то.

Мой код

#include <stdio.h>
#define printDoubleArray(x,l) printf(#x":\n[ ");for(int __i=0;__i<l;__i++) printf("%g, ",x[__i]);puts("]")

int cmp(const void* a,const void* b)
{
    double c = *((double*)a);
    double d = *((double*)b);
    return c>d;
}

int main(int argc,char** argv)
{
    double a[10] = { 0,0.9,5.6,2.7,3.6,4.5,5.4,6.3,7.2,8.1 };
    qsort(a,10,sizeof(double),cmp);
    printDoubleArray(a,10);
    pause();
    return 0;
}

Буг

a:
[ 0, 0.9, 4.5, 2.7, 3.6, 5.4, 5.6, 6.3, 7.2, 8.1, ]

Нажмите любую клавишу, чтобы продолжить. . .

Что этот буг, и что мне надо делать?


Ответы (1 шт):

Автор решения: MBo

Ваша функция сравнения возвращает только 0 и 1, а по спецификации требуется возврат отрицательного целого, 0, или положительного целого согласно результату сравнения.

Например, так:

if (c < d)
  return -1;
else if (c > d) return 1;
else return 0;
→ Ссылка