我正在研究一個程序的一部分,它按照幾個標準對數組中的帖子進行排序。帖子排序很好,直到程序到達最後一塊代碼。爲什麼這些排序標準之一有效,但不是其他排序標準?
的代碼塊,因爲它應該排序的職位:
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);
}
雖然這一次似乎並沒有影響到所有的排序(我甚至嘗試在最後扭轉了「<」簽到「如果「在下面的代碼語句,但它不會改變排序可言,導致我相信事情是關閉與整個塊):
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);
}
減法類似'serie [j] .gjorda - serie [j] .inslappta'和serie [i] .gjorda - serie [i] .inslappta'是否溢出? – chux
您應該顯示結構定義。這可能與'namn'成員的定義有關。如果可能是一個數組(char namn [30];')或一個指針('char * namn;'),或者你可能已經發明並做過其他事情。用指針,你必須擔心存儲空間;與你沒有的數組。你應該看看你是否也可以使用結構分配。 –
交換很複雜。建議'temp = serie [i]; serie [i] = serie [j]; serie [j] = temp;'。 – chux