冒泡排序算法(伪代码):
Input: Array A[1...n]
for i <- n,...,2 do
for j <- 2,...,i do
if A[j - 1] >= A[j] then
swap the values of A[j-1] and A[j];
我不确定,但我的证明似乎有效,但过于复杂。你能帮我清理一下吗?
循环不变:在每次迭代 i 之后,A 的 i - n + 1 个最大元素处于它们应该是 A 非降序排序的位置。在数组 A 包含多个最大值的情况下,令最大元素为所有可能最大值中索引最小的元素。
归纳法(i = n):内部循环遍历 A 的每个元素。最终,j 指向最大的元素。这个值将被交换,直到它到达位置 i = n,这是数组 A 中的最高位置,因此是 A 中最大元素的最终位置。
归纳步骤:(i = m -> i = m - 1 for all m > 3):内部循环遍历 A 的每个元素。最终,j 指向尚未排序的最大元素。这个值将被交换,直到它到达位置 i = m - 1,这是数组 A 中尚未排序的位置的最高位置,因此是 A 中最大的尚未排序元素的最终位置。
算法执行完毕后,位置1的剩余元素也处于其最终位置,因为如果不是,其右侧的元素将不会处于其最终位置,这是矛盾的。量子点