我一直在谷歌上搜索,并且找不到类似的问题或解释。气泡排序算法中的外环
假定以下代码:
int out, in;
for(out=nElems-1; out>1; out--)
for(in=0; in<out; in++) {
if(a[in] > a[in+1])
swap(in, in+1);
}
当外值达到1后为什么外循环停止?它不应该有2个元素吗? 0和1的地方?是什么让我们确信他们已经被分类?
我明白这个算法是如何工作的,并且意识到如果没有完成迭代就会停止一个标志,这会有更好的解决方案,但是我对理解上面的代码非常感兴趣。
不应交换是'交换(一个[IN] ,a [in + 1])'?你拥有它的方式是交换索引,而不是实际排列数据 – nem035 2014-09-13 18:04:11
你试过对上面的代码做空运行吗? – zerocool 2014-09-13 18:05:35
从书中复制而来。虚拟交换会照顾到这一点。 :) – Lifter 2014-09-13 18:05:43