Bubble排序,但需要将1移到底部。我可以使用riders [i] .withdrawn访问它

问题描述 投票:1回答:1
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-Jocelyn Lovell-1

1:50-S-安格斯·杨-0

2:35-S-埃迪·范·哈伦-0

3:08-S-比利F.吉本斯-0

3:38-S-Nikki Sixx-0

4:19-S-查理·瓦特-0

c bubble-sort
1个回答
2
投票

您想进行多键排序。

只需添加一个额外的状态变量。

我已经重构了您的代码,并对其进行了一些清理。请注意,因为您的代码块有点稀疏,所以我无法对此进行测试:

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");
}
© www.soinside.com 2019 - 2024. All rights reserved.