gpt4 book ai didi

c - 为什么我的程序不对结构进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:33 25 4
gpt4 key购买 nike

我正在尝试创建这个程序,它从用户那里获取一个 int 数字,然后根据输入在结构数组中随机化一对数字。然后它根据程序随机化的数字对的总和对该数组进行排序。

但是我的程序不会对结构数组进行排序。它没有正确进行排序,我不确定为什么。这是代码。

#define MAX 10

struct NumPair{
int n,m;
};

int main()
{
int i, j, amount=0;
NumPair NumPair[MAX];

srand(time(NULL));

printf("How many pair of numbers? (max 10): ");
scanf("%d", &amount);

for (i=0; i<amount; i++)
{
NumPair[i].n = rand() % 11;
NumPair[i].m = rand() % 11;
}

for (i=0; i<amount; i++)
{
for(j=1; j<amount; j++)
{
if( (NumPair[i].n+NumPair[i].m) > (NumPair[j].n+NumPair[j].m) )
{
int tmp;

tmp = NumPair[i].n;
NumPair[i].n = NumPair[j].n;
NumPair[j].n = tmp;

tmp = NumPair[i].m;
NumPair[i].m = NumPair[j].m;
NumPair[j].m = tmp;
}
}
}

for (i=0; i<amount; i++)
{
printf(" NumPair %d: (%d,%d)\n", i+1, NumPair[i].n, NumPair[i].m);
}
return 0;
}

我错过了什么?这可能是非常愚蠢的事情。

提前致谢。

最佳答案

您的算法不正确。这个小片段:

for (i=0; i<amount; i++) {
for(j=1; j<amount; j++) {

会导致 i 大于 j 的情况,然后你的比较/交换操作是错误的(如果 i 元素它交换大于 j,如果 i > j,则比较错误。

我应该提一下(除非这是家庭作业或其他教育)C 有一个非常合适的 qsort() 函数,可以为您完成繁重的工作。你最好了解这一点。

如果它家庭作业/教育,我想我已经给了你足够多的东西来解决它。您应该找到您正在尝试实现的特定算法并重新访问您的代码。

关于c - 为什么我的程序不对结构进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22187296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com