如何在C中基于2个字段对结构进行排序?

时间:2018-12-20 21:54:02

标签: c sorting quicksort ranking bubble-sort

我在Hangman游戏中使用了一个结构,该结构中用户根据不正确的尝试次数获得分数。

我的问题是如何对它们进行排名,同时考虑点数(pontos)和游戏数(n_jogos)。

例如:

  • 得分为10且只玩过一次的用户应该先得分为15且玩过2场游戏的用户。

到目前为止,我已经尝试过:

  • 实现qsort(),但是由于我不太了解它,因此无法使其正常工作。

  • 实现冒泡排序,该冒泡排序只能按游戏数进行排序,而不能同时按游戏数和分数进行排序。

任何帮助都会非常感激,谢谢。

2 个答案:

答案 0 :(得分:3)

  

拥有10分且只玩过一次的用户应该排在拥有15分且玩过2场游戏的用户之前。

那么,是否要先按游戏数排名,然后再按积分排名?我假设是,但是如果不是,那么您必须确定订购标准。您可以将此函数传递给 qsort (3)。调味季节。

typedef struct {
    char nome[50], password[50];
    int pontos, n_jogos;
} Utilizador;

int cmp ( const void *A, const void *B ) {
    const Utilizador *a=A, *b=B;

    if( a->jogos == b->jogos) {
        if( a->pontos == b-pontos ) return 0;
        return a->pontos < b-pontos? -1 : 1;
    }
    return  a->jogos < b->jogos? -1 : 1;
}

答案 1 :(得分:0)

您可以创建一个排名:

double userRank = (double)pontos / (double)n_jogos;

然后只需使用乘数对这两个变量进行加权即可调整排名系统。

按用户等级排序。