InsertionSort算法的解释

时间:2017-09-16 15:25:29

标签: algorithm

我有以下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?

1 个答案:

答案 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)中运行

希望它有所帮助!