我有以下Insertsort,其中数字是不同的
InsertionSort(A[1,...., n])
1 for i from 2 to n do
2 for j from 1 to i - 1 do
3 if A[i ] <= A[j ] then
4 tmp <- A[i ]
5 for k from i downto j + 1 do
6 A[k] <- A[k - 1]
7 A[j ] <- tmp
我的问题是,如果第3行中的条件对于多个j返回true,为什么不好?并且这条线最多可能是一个j?
答案 0 :(得分:0)
让我们先对齐代码。
InsertionSort(A[1,...., n])
1 for i from 2 to n do
2 for j from 1 to i - 1 do
3 if A[i] <= A[j] then
4 tmp <- A[i]
5 for k from i downto j + 1 do
6 A[k] <- A[k - 1]
7 A[j] <- tmp
回答你的问题(给定 - 不同数字的A数组)
why is it bad if condition in line 3 will returns true for more than one j?
第3行是我们确定按排序顺序插入所选元素的位置的位置。 对于每一个这样的发现,我们将所有元素的一步移到右侧。 因此,在第3行中更为正确总是不好。
现在,问题
is it possible that this line will be true for at most one j?
是的,使用不同的元素,您将永远不会获得条件为真的情况多次。 因为每次我们在现有的排序数组上运行内部for循环(第2行)。
如果我们找到了位置和移位的数组元素,则最后一个元素(A [i])总是大于它之前的其余元素。 因此,第3行最多只能一次。
注意:强>
对于具有不同implementation
的近似投注数组,可以进一步优化此算法以在O(n)中运行希望它有所帮助!