【发布时间】: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 结构中的两个变量(winner 和 loser)中的第二个元素移动到第一个和以此类推
【问题讨论】:
-
pair_strength永不改变;他们不应该随着他们描述力量的元素一起移动吗? -
您实际上并没有对正在比较的数据进行排序。那将不起作用。仅供参考,C 支持结构化分配。 IE。
pair tmp = pairs[j];等.. -
pairs[j].winner在调用函数之前是否已经初始化? -
你需要对
pair_strength进行排序,否则它将不起作用:例如在第一次通过时,您交换pairs[1]和pairs[2],因为pair_strength[1] < pair_strength[2]在第二次通过时,您交换回原来的位置,因为pair_strength未更改。 -
强烈推荐给你:笔和纸,通过调试器和橡皮鸭对话
标签: c