Ваша функция cmp
возвращает 1
, если левый элемент больше, чем правый элемент, в противном случае возвращается 0
.Документация для qsort
гласит:
The comparison function must return an integer less than, equal to, or
greater than zero if the first argument is considered to be respec‐
tively less than, equal to, or greater than the second.
Попробуйте это для функции сравнения:
int cmp(const void *ptr1, const void *ptr2)
{
double first = (*(struct island *)ptr1).right;
double second = (*(struct island *)ptr2).right;
if (first < second) return -1;
else if (first > second) return 1;
else return 0;
}