我正在尝试理解插入排序的代码,但我真的很困惑,我不明白我,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.
答案 0 :(得分:1)
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]
依旧......