对除第一个元素之外的所有内容进行排序,qsort C

Sort everything except first element, qsort C

我确实有些奇怪。我想在棋盘上按颜色对许多元素的数组进行排序。这很容易(见附件代码),所以如果 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);
}

您可以将指针传递给第二个元素(即索引为 1 的那个)而不是数组的开头并将计数减一,正如@ user3386109 评论的那样:

qsort(fieldArr + 1, (size_t) (countFields - 1), sizeof(Field), compareColour);
/* 2nd element---^ */
/* Reduce the count ----------------------^ */