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

时间:2018-06-10 18:12:38

标签: c arrays sorting qsort

我确实有些奇怪的事。我想在国际象棋棋盘上按颜色对许多元素进行排序。这很容易(参见附件代码),所以如果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 个答案:

答案 0 :(得分:5)

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

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