我在Rust中开发了一个排序算法的非常基本的实现,除了一件事之外,它可以按我希望的方式工作。它可以接受一组输入(取[3,6,2,1,1,9,4]),并将其排序。每次交换后,我的程序都会打印一组新的输出。我想知道的是,我怎样才能真正知道我的排序何时结束?解决后,它会显示一个完整的排序,并无限地挂在那里。
我能做的是硬编码预期的结果,然后检查排序是否与之匹配,但这很可怕,原因有两个:破坏了排序的整个目的,效率低下,需要艰巨的工作编码的值,那么任何动态值都无法通过算法。这是简单的算法:
loop {
for num in 0..(nums.len() - 1) {
if nums[num] > nums[num + 1] {
let i = nums[num + 1];
nums[num + 1] = nums[num];
nums[num] = i;
}
}
}
我想做的是识别出何时完成排序,并且break;
退出循环,但是一旦解决,程序就会挂起。
感谢您的帮助!
答案 0 :(得分:1)
每次迭代时,都要跟踪数组是否已排序,如果已排序则中断。
let mut sorted = false;
while !sorted {
sorted = true;
for num in 0..(nums.len() - 1) {
if nums[num] > nums[num + 1] {
let i = nums[num + 1];
nums[num + 1] = nums[num];
nums[num] = i;
sorted = false;
}
}
}
请记住,这是O(n ^ 2)排序,所以我实际上不会将其用于任何事情。