如何知道排序算法何时完成?

时间:2018-12-22 05:00:57

标签: algorithm sorting language-agnostic

我在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;退出循环,但是一旦解决,程序就会挂起。

感谢您的帮助!

1 个答案:

答案 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)排序,所以我实际上不会将其用于任何事情。