[英]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 - dec
或jk[0] - dec + 1
?
對於i=0
,您找到(除最后一個元素外的所有元素中的最大元素,因為dec
從2
開始,而不是1
),並將其放在第0個位置。
然后,對於i=1
,您找到最大的元素(同樣,除最后一個元素(包括第一個元素)之外的所有元素)並將其放在第一個位置。
等等。
您無法像這樣進行排序-當然,最大的元素會最后出現(根據您對其他答案的評論,這不是您想要的),但是無法確保其他任何元素都是實際排序。
如果要在內部循環中按從大到小的順序對其進行排序,則需要在到達i
時停止,因此您只選擇其余元素中的最大元素。
這與選擇排序非常相似,因此您可以查看它以獲取更多信息或進行優化(例如跟蹤最大值並在最后交換,而不是在找到的每個較大元素處交換)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.