在Robert Lafore的《Java数据结构与算法》一书中,插入排序被称为稳定算法。这意味着相等的元素会保持它们的顺序。
以下是书中的示例:
在
以下是书中的示例:
public void insertionSort() {
int in, out;
for (out = 1; out < nElems; out++) // out is dividing line
{
long temp = a[out]; // remove marked item
in = out; // start shifts at out
while (in > 0 && a[in - 1] >= temp) // until one is smaller,
{
a[in] = a[in - 1]; // shift item right,
--in; // go left one position
}
a[in] = temp; // insert marked item
} // end for
} // end insertionSort()
在
while
循环中,我们向左移动并寻找temp
变量的位置。即使a[in - 1] == temp
,我们仍然向左移动一步,并将tmp
插入到a[in - 1]
之前,在原始数组中tmp
在a[in - 1]
右侧。
排序后,数组元素的顺序发生了改变。那么这个算法如何保持稳定?难道应该只有a[in - 1] > temp
而不是a[in - 1] >= temp
吗?
也许我只是犯了一个错误,没有看到明显的东西?
> temp
。你应该通过真正的调试来验证它。 - Oleg