基本原理:
1. 无名成立了梁山,并摇旗招队友
(ア) 林冲来了打败了无名,成了老大
(イ) 李逵来了打不赢林冲,往下面继续打赢了无名,成了老二
(ウ) 叶青来了打不赢林冲、打不赢李逵、打赢了无名、成了老三
(エ) 卢俊义来了打不赢林冲、打赢了李逵、成了老二。
2. 一个有序的数组,不断接收新的成员,该成员需要依次和最大的数组做出比较,确定自己的位置。
3. 新成员来的时候像卢俊义来的时候带了一个很高的官位,所以,大家都推举他当老大。
(ア) 该成员比最大的数字还大,所以不需要移位。
(イ) 如果比最大的数字小,则需要与最大数字交换位置,继续向下比较
具体实现方法:
1. 外层循环控制比较总轮数,最大长度 -1轮
2. 第一个数字坐定,外层循环从1开始
3. j=i
4. 内层循环j必须大于0 并且 j与j-1比较
(ア) array(j) < array(j-1)
(イ) 交换位置
(ウ) j - -
(エ) 新数字调整到了array(j - 1)的位置,继续向下与j – 1做出比较。
(オ) 直到array(j) 不小于array(j-1)为止,位置确认,不需要继续交换
(カ) 或者j = 0,新加入数字排到老幺为止
1 Module insertionSort 2 3 4 Private Sub swap(ByVal array() As Short, ByVal a As Short, ByVal b As Short) 5 array(a) = array(a) Xor array(b) 6 array(b) = array(a) Xor array(b) 7 array(a) = array(a) Xor array(b) 8 End Sub 9 10 Private Sub insertionSort(ByVal array() As Short) 11 Dim i, j As Short 12 For i = 1 To UBound(array) 13 j = i 14 While (j > 0 AndAlso array(j) < array(j - 1)) 15 swap(array, j, j - 1) 16 j = j - 1 17 End While 18 Next 19 End Sub 20 21 Sub Main() 22 Dim array() As Short = {9, 8, 7, 6, 5, 1, 2, 4, 3, 10} 23 insertionSort(array) 24 For i As Short = 0 To UBound(array) 25 System.Console.Write(array(i)) 26 System.Console.Write(" ") 27 Next 28 System.Console.Read() 29 End Sub 30 31 32 33 End Module