请教:用vb举一个最简单的例子说明冒泡排序法的用法,谢谢。
1个回答
展开全部
首先你明白冒泡排序的机制吧,每个元素后边得元素比较,如果小于后边的,则交换位置
Private Sub SortIntegerArray(paintArray() As Integer)
Dim lngX As Long
Dim lngY As Long
Dim intTemp As Integer
For lngX = LBound(paintArray) To (UBound(paintArray) - 1)
For lngY = LBound(paintArray) To (UBound(paintArray) - 1)
If paintArray(lngY) > paintArray(lngY + 1) Then
intTemp = paintArray(lngY)
paintArray(lngY) = paintArray(lngY + 1)
paintArray(lngY + 1) = intTemp
End If
Next
Next
End Sub
Private Sub SortIntegerArray(paintArray() As Integer)
Dim lngX As Long
Dim lngY As Long
Dim intTemp As Integer
For lngX = LBound(paintArray) To (UBound(paintArray) - 1)
For lngY = LBound(paintArray) To (UBound(paintArray) - 1)
If paintArray(lngY) > paintArray(lngY + 1) Then
intTemp = paintArray(lngY)
paintArray(lngY) = paintArray(lngY + 1)
paintArray(lngY + 1) = intTemp
End If
Next
Next
End Sub
追问
您好,我很难看懂你的代码,请您举一个具体的例子。(比如对含有1、8、2、3、9等元素的数组进行按升序排列)
追答
这不怪你,上边的有笔误,看下面的,冒泡的就是让大的沉底,轻的上浮
Public Sub BubbleSort1(ByRef paintArray() As Integer)
Dim i As Long
Dim iMin As Long
Dim iMax As Long
Dim intTemp As Integer
Dim blnSwapped As Boolean
iMin = LBound(paintArray)
iMax = UBound(paintArray) - 1
Do
blnSwapped = False
For i = iMin To iMax
If paintArray(i) > paintArray(i + 1) Then
intTemp = paintArray(i)
paintArray(i) = paintArray(i + 1)
paintArray(i + 1) = intTemp
blnSwapped = True
End If
Next
'看里边的折冲循环就是比较相邻的数,大往后排
'第一次结果是1,2,3,8,9(其实你给的数一次就排好了),第一循环保证最大的数在末尾
iMax = iMax - 1'第二次不需要排最后的了,前边的再继续排,一次类推。你这里第二次循环没有交换数据所以blnSwapped =false退出外层do循环,排序结束
Loop Until Not blnSwapped
End Sub
冒泡排序演算法的運作如下:
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重複以上的步驟,除了最後一個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
由於它的簡潔,冒泡排序通常被用來對於程式設計入門的學生介紹演算法的概念。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询