基本原理:
比喻冒泡其实非常形象,就是数据两两对决,决出最强者,出人头地。
具体做法:
1. 外层循环控制决斗多少轮,因为每轮决出一个最强者,所以决斗总轮数 = 决斗总人数 - 1 。-1的意思是,最后只剩下一个人的时候,他不需要再继续对决,号称最弱。
2. 内层循环控制每轮决斗多少次,因为是两两对决,所以每轮决斗次数 = 决斗总人数 - 1。另外,因为每轮会决出一个最强者,所以,决斗总人数递减,每轮决斗次数伴随决斗总人数递减。
1 Private Sub BubbleSort(ByVal array() as Short) 2 Dim i,j as Short 3 Dim LbFlag as Boolean 4 For i = 0 To UBound(array) - 1 5 LbFlag = True 6 For j = 0 To UBound(array) - 1 - i 7 If(array(j) > array(j + 1)) Then 8 swap(array , j , j + 1) 9 LbFlag = False 10 End If 11 Next 12 13 If LbFlag Then 14 Exit For 15 End If 17 Next 18 End Sub
1 Private Sub swap(ByVal array As Short(), ByVal a As Short, ByVal b As Short) 2 array(a) = array(a) + array(b) 3 array(b) = array(a) - array(b) 4 array(a) = array(a) - array(b) 5 End Sub
3. 设置一个交换Flag,假设决斗继续进行,但是排名再没有发生变化,则说明排名结束,避免不必要的争斗。