我正在研究一个程序的一部分,该程序按照几个标准对数组中的帖子进行排序。这些帖子排序很好,直到程序到达最后一段代码。
这段代码对帖子进行排序:
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”语句中的“&lt;”符号,但它根本不会改变排序,让我相信整个街区都有一些事情发生了):
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);
}
答案 0 :(得分:1)
执行此操作时:
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)
然后交换,你实际上是在说&amp;&amp;所有这些条件决定了订单,这对我来说似乎不对。
我会创建一个函数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
}
您原件的主要问题是您没有指定.poang不相等的订单。如果原始数组的.poang具有所有不同的值,那么顺序将永远不会改变。