如何知道排序算法何时完成?
How to know when a sorting algorithm has finished?
我已经在 Rust 中开发了一个非常基本的排序算法实现,它按照我想要的方式工作,除了一件事。它能够接受一组输入(接受 [3, 6, 2, 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;
脱离我的循环,但是,一旦它被解决,程序就会挂起。
感谢任何帮助!
每次迭代,跟踪数组是否已排序,如果是则中断。
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) 排序,所以我实际上不会将它用于任何事情。
我已经在 Rust 中开发了一个非常基本的排序算法实现,它按照我想要的方式工作,除了一件事。它能够接受一组输入(接受 [3, 6, 2, 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;
脱离我的循环,但是,一旦它被解决,程序就会挂起。
感谢任何帮助!
每次迭代,跟踪数组是否已排序,如果是则中断。
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) 排序,所以我实际上不会将它用于任何事情。