Bubble Sort in C, но нужно переместить что-нибудь с 1 до конца. Я могу использовать райдеров [i] .withdrawn, чтобы получить к нему доступ - PullRequest
1 голос
/ 14 апреля 2020
void sortraceTime(struct RiderInfo *riders, int size){

 struct RiderInfo swap;
  int i = 0, j = 0, n = size;

 //Sorting using the Bubble sort technique

for (i = 0; i < n; ++i){
     for (j = i + 1; j < n; ++j){
         if (riders[i].raceTime > riders[j].raceTime){
             swap = riders[i];
             riders[i] = riders[j];
             riders[j] = swap;
         }//end if
     }//end inner for
 }//end outer for
    printf("\n");
    printf("--- Riders sorted by raceTime! ---\n");
    printf("\n");
}

Вывод ------------------------------------------- ----------------------------

0: 24 - S - Джоселин Ловелл - 1

1: 50 - S - Ангус Янг - 0

2: 35 - S - Эдд ie Ван Хален - 0

3: 08 - S - Билли Ф. Гиббонс - 0

3: 38 - S - Никки Сикс - 0

4: 19 - S - Чарль ie Ватт - 0

1 Ответ

2 голосов
/ 14 апреля 2020

Вы хотите выполнить сортировку с несколькими ключами.

Просто добавьте дополнительную переменную состояния.

Я реорганизовал ваш код и немного его очистил. Обратите внимание, что, поскольку ваш блок кода был немного редким, я не смог проверить это:

void
sortraceTime(struct RiderInfo *riders, int size)
{
    struct RiderInfo swap;
    struct RiderInfo *lhs;
    struct RiderInfo *rhs;
    int i;
    int j;
    int n = size;
    int needswap;

    // Sorting using the Bubble sort technique

    for (i = 0; i < n; ++i) {
        lhs = &riders[i];

        for (j = i + 1; j < n; ++j) {
            rhs = &riders[j];

            needswap = 0;
            if (lhs->withdrawn > rhs->widthdrawn)
                needswap = 1;
            if (lhs->raceTime > rhs->raceTime)
                needswap = 1;

            if (needswap) {
                swap = *lhs;
                *lhs = *rhs;
                *rhs = swap;
            }
        }
    }

    printf("\n");
    printf("--- Riders sorted by raceTime! ---\n");
    printf("\n");
}
...