我正在开发一个程序的一部分,该程序根据几个标准对数组中的帖子进行排序。在程序到达最后一个代码块之前,帖子会很好地排序。
此代码块按应有的方式对帖子进行排序:
for (i = 0; i < 11; i++)
for (j = i + 1; j < 12; j++)
if (serie[j].poang == serie[i].poang)
if ((serie[j].gjorda - serie[j].inslappta) < (serie[i].gjorda - serie[i].inslappta))
{
temp.poang = serie[i].poang;
serie[i].poang = serie[j].poang;
serie[j].poang = temp.poang;
temp.gjorda = serie[i].gjorda;
serie[i].gjorda = serie[j].gjorda;
serie[j].gjorda = temp.gjorda;
temp.inslappta = serie[i].inslappta;
serie[i].inslappta = serie[j].inslappta;
serie[j].inslappta = temp.inslappta;
strcpy(temp.namn, serie[i].namn);
strcpy(serie[i].namn, serie[j].namn);
strcpy(serie[j].namn, temp.namn);
}
虽然这似乎根本不影响排序(我什至尝试在下面的代码中的最后一个“if”语句中反转“<”符号,但它根本不会改变排序,导致我相信整个街区都有问题):
for (i = 0; i < 11; i++)
for (j = i + 1; j < 12; j++)
if (serie[j].poang == serie[i].poang)
if ((serie[j].gjorda - serie[j].inslappta) < (serie[i].gjorda - serie[i].inslappta))
if(serie[j].gjorda < serie[i].gjorda)
{
temp.poang = serie[i].poang;
serie[i].poang = serie[j].poang;
serie[j].poang = temp.poang;
temp.gjorda = serie[i].gjorda;
serie[i].gjorda = serie[j].gjorda;
serie[j].gjorda = temp.gjorda;
temp.inslappta = serie[i].inslappta;
serie[i].inslappta = serie[j].inslappta;
serie[j].inslappta = temp.inslappta;
strcpy(temp.namn, serie[i].namn);
strcpy(serie[i].namn, serie[j].namn);
strcpy(serie[j].namn, temp.namn);
}
最佳答案
当你这样做时:
if (serie[j].poang == serie[i].poang)
if ((serie[j].gjorda - serie[j].inslappta) < (serie[i].gjorda - serie[i].inslappta))
if(serie[j].gjorda < serie[i].gjorda)
然后交换,你实际上是在说所有这些条件的 && 决定顺序,这对我来说似乎是错误的。
我会创建一个函数 isInOrder
,它接受数组指针和两个索引,如果左边的索引在右边的索引之前,则返回 TRUE。然后
if (!isInOrder(serie, i, j)) {
// swap
}
你的函数是(序列类型为S*
):
int isInOrder(S *array, int i, int j) {
// fill this in. Return 1 if they are in order, 0 if not
}
原始 if 的主要问题是您没有指定 .poang 不相等时的顺序。如果您的原始数组包含具有所有不同值的 .poang,则顺序永远不会改变。
关于c - 为什么这些排序标准之一起作用,而另一个不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43480965/