我们如何使用归纳法显示冒泡排序是否正确?我们如何在证明的制定过程中选择不变量(这一步对我来说似乎是一项任意的任务,所以如果可以更深入地解释我会非常感激它)?
据我所知,每次迭代后最大的元素总是会在列表的末尾结束,但我不知道如何使用这个事实证明算法是正确的。
感谢您的帮助!
答案 0 :(得分:0)
我不确定这是不是你想要的,但他是我的看法。
冒泡排序背后的想法是你通过值的向量(从左到右)。我称之为通行证。在传递期间,检查值对并交换为正确的顺序(右上角)。
在第一次通过期间,将达到最大值。到达时,max将高于其旁边的值,因此它们将被交换。这意味着max将成为传递中下一对的一部分。这将重复,直到传递完成并且最大值留在向量的右端。
在第二次传递期间,对于矢量中的第二个最高值也是如此。唯一的区别是它不会与最后的最大值交换。现在正确设置了两个最正确的值。
我每下一次传递一个值将被排序到右边。
有N个值和N个通道。这意味着在N次通过后,所有N个值都将被排序