Сортировать все, кроме первого элемента, qsort C - PullRequest
0 голосов
/ 10 июня 2018

У меня есть что-то странное.Я хотел бы отсортировать множество шахматных элементов по цвету на шахматной доске.Это довольно просто (см. Прилагаемый код), поэтому, если 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 голосов
/ 10 июня 2018

Вы можете просто передать указатель на второй элемент (т. Е. На индекс 1) вместо начала массива и уменьшить счетчик на единицу, как прокомментировал @ user3386109:

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