插入排序说明

时间:2015-08-23 10:33:22

标签: pascal freepascal

我正在尝试理解插入排序的代码,但我真的很困惑,我不明白我,j,索引在代码中做了什么..有人可以帮我理解更多

Procedure InsertionSort(numbers : Array of Integer; size : Integer);
Var i, j, index : Integer


    Begin
     For i := 2 to size-1 do
      Begin
       index := numbers[i];
       j := i;
       While ((j > 1) AND (numbers[j-1] > index)) do
        Begin
         numbers[j] := numbers[j-1];
         j := j - 1;
        End;
       numbers[j] := index;
      End;

    End.

1 个答案:

答案 0 :(得分:1)

Imo,名称index可能有些误导。在这种情况下,我会称之为currentValue或类似的东西。那说:

想象一下数字 - > [5,3,7,2,9,1,8,4]

算法从2开始,所以:

i == 2; currentValue := numbers[i] (== 7)

现在算法移动位于indices(j)< i中的所有值,只要j > 1,值为< 7一个位置:

numbers[1] == 3 < 7 -> numbers[2] = 3
numbers[0] == 5 < 7 -> numbers[1] = 5

最后将currentValue写入numbers[0]。所以第一次传递后的结果将是

[7, 5, 3, 2, 9, 1, 8, 4]

第二次传球(2比之前的任何地方都要小,所以没有任何事情发生):

[7, 5, 3, 2, 9, 1, 8, 4]

第三遍(9是numbers[0]numbers[4]中的最大元素):

[9, 7, 5, 3, 2, 1, 8, 4]

依旧......