gongjin

基本原理:

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

 

分类:

技术点:

相关文章: