簡體   English   中英

排序算法未在for循環中遞增

[英]Sorting algorithm not incrementing in for loop

void sortRooms()

我想出了這種算法來排序我的房間結構。 在房間結構中,只有3個值(50、120、30),這就是為什么我必須在開始時將索引減小,每次將dec增大1的原因。 但是,當我編譯並打印出來時

OHE 100 120
SAL 210 30
OHE 120 50

我找出了紙上的步驟,但似乎無法理解為什么索引未正確遞增,因此它會繼續將120與50進行比較,然后繼續切換這些值。 任何幫助,將不勝感激。

為什么不將while循環更改為for循環? 例如:

for (int dec=2; (jk[0]-dec+1) > 1; dec++)
{
    if (room[i].max_students > room[jk[0] - dec].max_students)
    {            
        TEMPbuilding_code = room[i].building_code;
        room[i].building_code = room[jk[0] - dec].building_code;
        room[jk[0] - dec].building_code = TEMPbuilding_code;

        TEMProom_number = room[i].room_number;
        room[i].room_number = room[jk[0] - dec].room_number;
        room[jk[0] - dec].room_number = TEMProom_number;

        TEMPmax_students = room[i].max_students;
        room[i].max_students = room[jk[0] - dec].max_students;
        room[jk[0] - dec].max_students = TEMPmax_students;
    }
}

另外,您在while循環中的操作順序是否混亂? 我想應該是jk[0] + 1 - decjk[0] - dec + 1

對於i=0 ,您找到(除最后一個元素外的所有元素中的最大元素,因為dec2開始,而不是1 ),並將其放在第0個位置。

然后,對於i=1 ,您找到最大的元素(同樣,除最后一個元素(包括第一個元素)之外的所有元素)並將其放在第一個位置。

等等。

您無法像這樣進行排序-當然,最大的元素會最后出現(根據您對其他答案的評論,這不是您想要的),但是無法確保其他任何元素都是實際排序。

如果要在內部循環中按從大到小的順序對其進行排序,則需要在到達i時停止,因此您只選擇其余元素中的最大元素。

這與選擇排序非常相似,因此您可以查看它以獲取更多信息或進行優化(例如跟蹤最大值並在最后交換,而不是在找到的每個較大元素處交換)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM