排序算法在for循环中不加1
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,然后继续切换这些值。
对于i=0
,您找到最大的元素(除了最后一个元素,因为dec
从2
开始,而不是1
)并将其放在第0个位置。
然后,对于i=1
,您找到最大的元素(同样是所有元素中,除了最后一个元素,它包括第一个元素)并将其放在第一个位置。
等等
你不能这样排序——当然,最大的元素会在最后结束(根据你对另一个答案的评论,这不是你想要的),但是没有什么能确保任何其他元素都被排序。
如果你想让它从大到小排序,在你的内循环中,你需要在到达i
时停止,所以你只选择剩余元素中最大的元素。
这与选择排序非常相似,因此您可以查看更多信息或优化(例如跟踪最大值并在最后交换,而不是在我们找到的每个更大的元素上交换)。
为什么不把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
?
相关文章:
- C++:尝试使用等效的 STL 算法消除原始循环
- 如何在贝尔曼福特算法中检测负循环?
- 循环中的循环算法
- 有没有一种方法可以使用弗洛伊德-沃歇尔算法给出最短路径,其中存在负权重循环而不允许重叠边缘?
- 使用 while 循环和搜索算法进行复制
- C++ 循环和搜索算法,重复
- STL算法并嵌套以循环
- 使用 c++17 算法并行化简单循环
- 为什么当我使用std::算法而不是纯循环时,这个代码会变慢
- for_each算法在boost::multi_array上循环
- C++循环算法不正确(或文件处理问题)
- 虽然循环/算法问题c ++ visual studio 2012
- C++循环算法逻辑问题
- 如何使用std算法来替换for循环
- 嵌套 for 循环的任何快速搜索算法
- 如何替换我的"for"循环以通过 STL mimax 算法找到最小值/最大值
- 在循环双向链表的第一个节点之前/之后插入的算法是什么?
- 如何使用 C++ STL 算法重写嵌套循环
- 使用两个语句并行化 while 循环(弗洛伊德循环检测算法)
- c++ For循环算法