我确实有些奇怪的事。我想在国际象棋棋盘上按颜色对许多元素进行排序。这很容易(参见附件代码),所以如果x%2 == y%2为真,那么它是黑色的,如果不是白色的话。 但那不是问题。我在数组的前面有一个元素,这有点不同(稍后需要进行一些计算)并且需要保持原样。
是否可以在不触及第一个元素的情况下对数组进行排序?
int compareColour(const void * fs1, const void * fs2) {
Field *orderA = (Field *)fs1;
Field *orderB = (Field *)fs2;
bool isBlackB = ((orderA->x%2)==(orderA->y%2));
bool isBlackA = ((orderB->x%2)==(orderB->y%2));
return (isBlackB - isBlackA);
}
void sortByColour() {
qsort(fieldArr,(size_t) countFields, sizeof(Field), compareColour);
}
答案 0 :(得分:5)
您可以直接将指针传递给第二个元素(即索引为1的那个元素)而不是数组的开头,并将计数减一,如@ user3386109所述:
qsort(fieldArr + 1, (size_t) (countFields - 1), sizeof(Field), compareColour);
/* 2nd element---^ */
/* Reduce the count ----------------------^ */