【问题标题】:why is the sort function not sorting a struct?为什么排序函数不对结构进行排序?
【发布时间】:2021-01-14 02:08:54
【问题描述】:

我有下面的pair 结构,它包含两个变量:

typedef struct
{
    int winner;
    int loser;
}
pair;

我正在尝试根据长度相同的数组pair_strength 对它们进行排序。然而,虽然排序功能看起来不错,但 pair 结构的排序根本没有改变。下面是排序函数:

int pair_strength[] = {1, 5, 2, 4, 3};
void sort_pairs(void)
{
    // bubble sort
    for (int i = 0; i < pair_count-1; i++)
    {
        for (int j = 0; j < pair_count-i-1; j++)
        {
            if (pair_strength[j] < pair_strength[j+1])
            {
                int temp_w = pairs[j].winner;
                int temp_l = pairs[j].loser;
                pairs[j].winner = pairs[j+1].winner;
                pairs[j].loser = pairs[j+1].loser;
                pairs[j+1].winner = temp_w;
                pairs[j+1].loser = temp_l;
            }
        }
    }

}

因此,鉴于 5 是 pair_strength 中的第二个元素并且是最大的数字,我想将 pair 结构中的两个变量(winnerloser)中的第二个元素移动到第一个和以此类推

【问题讨论】:

  • pair_strength 永不改变;他们不应该随着他们描述力量的元素一起移动吗?
  • 您实际上并没有对正在比较的数据进行排序。那将起作用。仅供参考,C 支持结构化分配。 IE。 pair tmp = pairs[j];等..
  • pairs[j].winner在调用函数之前是否已经初始化?
  • 你需要对pair_strength进行排序,否则它将不起作用:例如在第一次通过时,您交换 pairs[1]pairs[2],因为 pair_strength[1] &lt; pair_strength[2] 在第二次通过时,您交换回原来的位置,因为 pair_strength 未更改。
  • 强烈推荐给你:笔和纸,通过调试器和橡皮鸭对话

标签: c


【解决方案1】:

感谢大家的帮助。以下是更新功能:

void sort_pairs(void)
{
    // bubble sort
    for (int i = 0; i < pair_count-1; i++)
    {
        for (int j = 0; j < pair_count-i-1; j++)
        {
            if (pair_strength[j] < pair_strength[j+1])
            {
                pair t = pairs[j];
                pairs[j] = pairs[j+1];
                pairs[j+1] = t;
                int t2 = pair_strength[j];
                pair_strength[j] = pair_strength[j+1];
                pair_strength[j+1] = t2;
            }
        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2021-07-28
    • 2019-11-25
    相关资源
    最近更新 更多