Имеется:
struct KeyValue{
uint64_t value;
unsigned int key;
};
int compare(const void* a, const void* b){
return ( ((KeyValue*)a)->value - ((KeyValue*)b)->value );
}
int compare2(const void* a, const void* b){
uint64_t f = ((KeyValue*)a)->value;
uint64_t s = ((KeyValue*)b)->value;
if(f == s)
return 0;
if(f < s)
return -1;
return 1;
}
1 компаратор, логично, что вычтя из unsigned unsigned - отрицательного не получится никак. Поэтому компаратор не правильно работает, на самом деле он почти сортирует, но сортирует блоками, по несколько 10 тысяч элементов. 2 компаратор, что не так в нем? Получается полная фигня на выходе из qsort.
P.S. надо сортировать именно по value, на key наплевать