bug也能负负得正
明敏 晓查 发自 凹非寺 非常AI 报道 | 公众号 QbitAI程序bug也能负负得正吗? 还真可以。


总之,这段代码“绝对不可能正确”。 △冒泡算法
- 不等号方向错了,第二层循环指数j的范围也弄错了。

考虑以下三种情况: 1、1 ≤ j ≤ k−1 由于A[i+1]>A[j],没有任何元素交换发生。 2、 k ≤ j ≤ i (如果k=i+1,则不存在此步骤) 由于A[j]>A[i+1],所以每次比较后都会有元素交换发生。 我们使用A[ ]和A′[ ]来表示交换前和交换后的元素,所以 A′[i+1] = A[k],A′[k]=A[i+1] 经过一系列交换,最大元素最终被放到了A[i+1] 位置上,原来的A[i+1]变成了最大元素,A[k]被插入了大小介于原来A[k]和A[k-1]之间的元素。 3、i+1 ≤ j ≤ n 由于最大元素已经交换到前i+1个元素中,此过程也没有任何元素交换。 最后,Pₙ就是升序排序算法执行完以后的结果。 由于内外两组循环没有任何范围差别,因此这可以说是“最简单”的排序算法了。 从代码上来看,它很像冒泡算法,但从证明过程中可以看出,这实际上是一种插入算法。 △插入算法
- 首先假设A[k](k介于1~i之间)满足A[k]>A[i+1]最小的一个数,那么A[k−1]≤A[i+1](k≠1)。
- 如果A[i+1]≥A[i],那么这样的k不存在,我们就令k=i+1。

- 如果我没记错的话,他用的就是这种算法。




- 我百分百确定,在我刚开始学编程、并想要找到最短的排序方法时就写过它。




很快就有人提议说——
- 我确定我此前看到过这种算法,它没有名字吗?
- 如果它没有名字的话,我建议称之为“面试排序”。
