微比恩 > 信息聚合 > 比冒泡算法还简单的排序算法:看起来满是 Bug 的程序,居然是对的

比冒泡算法还简单的排序算法:看起来满是 Bug 的程序,居然是对的

2021-10-06 14:12:15来源: IT之家

程序 bug 也能负负得正吗?还真可以。比如程序员们再熟悉不过的排序算法,通过两个“bug”居然能歪打正着,实在令人匪夷所思。请看这位程序员写的数组升序排序代码:今天这串代码在 Hacker News 论坛上突然火了起来,引来大批程序员围观。乍一看这段代码,你的反应会是什么?会不会觉得这个程序员水平太差了,连基本的冒泡算法都写不好:不等号方向错了,第二层循环指数 j 的范围也弄错了。总之,这段代码“绝对不可能正确”。△冒泡算法但如果你真的运行一下会发现,结果还真的是按照升序排列的。我们再来看一下正确的冒泡算法代码是怎样的:后者不同之处是 j = i + 1 且 A [i] > A [j] ,两段程序大相径庭。然而我要告诉你一个不可思议的事实,其实第一串代码是对的,而且可以严格证明。那么它是如何实现正确排序的?为何能歪打正着仔细一想,其实很容易理解。因为该算法比冒泡排序多一半交换操作,正好可以将降序变成升序。不过,作者还是给

关注公众号