我确实有些奇怪。我想在棋盘上按颜色对许多元素进行排序。这非常容易(请参阅附加代码),因此,如果x%2 == y%2为true,则为黑色,否则为白色。但这不是问题。我确实在数组的前面有一个元素,这有点不同(以后需要进行一些计算),并且需要保持在原位置。
是否可以在不触摸第一个元素的情况下对数组进行排序?
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);
}
您可以将指针传递到第二个元素(即索引1处的指针),而不是数组的开头,然后将计数减少一个,如@ user3386109所评论:
qsort(fieldArr + 1, (size_t) (countFields - 1), sizeof(Field), compareColour);
/* 2nd element---^ */
/* Reduce the count ----------------------^ */
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句