江蘇省二級VB常用算法(六)排序 |
VB常用算法(六)排序曹蘇群 http://caosuqun.bokee.com 關鍵詞: 排序 算法
1、算法說明1) 選擇法排序
(1) 從n個數中選出最小數的下標,出了循環,將最小數與第一個數交換位置; (2) 除第一個數外,在剩下的n-1個數中再按方法(1)選出次小的數,與第二個數交換位置; (3) 以此類推,最后構成遞增序列。 譬如: 8 6 9 3 2 7 第一輪交換后 2 6 9 3 8 7 第二輪交換后 2 3 9 6 8 7 第三輪交換后 2 3 6 9 8 7 第四輪交換后 2 3 6 7 8 9 第五輪無交換 2 3 6 7 8 9
程序代碼如下: Private Sub xzPaiXu(a() As Double, sheng As Boolean) 'a為需要排序的數組,sheng為True則為升序排列,為False,則為降序排列。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer For i = LBound(a) To UBound(a) - 1 '進行數組大小-1輪比較 m = i '在第i輪比較時,假定第'i個元素為最值元素 For j = i + 1 To UBound(a) '在剩下的元素中找出最 '值元素的下標并記錄在m中 If sheng Then '若為升序,則m記錄最小元素 '下標,否則記錄最大元素下標 If a(j) < a(m) Then m = j Else If a(j) > a(m) Then m = j End If Next j '將最值元素與第i個元素交換 temp = a(i) a(i) = a(m) a(m) = temp Next i End Sub
調用該過程示例: Option Base 1 Private Sub Command1_Click() Dim b(6) As Double b(1) = 8 b(2) = 6 b(3) = 9 b(4) = 3 b(5) = 2 b(6) = 7 Call xzPaiXu(b, True) For i% = 1 To 6 Print b(i) Next End Sub
2) 冒泡法排序 選擇排序法在每一輪排序時找最值元素的下標,出了內循環(一輪排序結束),再交換最小數的位置;而冒泡法在每一輪排序時將相鄰的數比較,當次序不對就交換位置,出了內循環,最值數已經冒出。 譬如: 8 6 9 3 2 7 8 6 9 3 2 7 8 6 9 2 3 7 8 6 2 9 3 7 8 2 6 9 3 7 2 8 6 9 3 7 …. 2 3 8 6 9 7 …. 2 3 6 8 7 9 …. 2 3 6 7 8 9 …. 2 3 6 7 8 9
程序代碼如下:
Private Sub mpPaiXu(a() As Double, sheng As Boolean) 'a為需要排序的數組,sheng為True則為升序排列,為False,則為降序排列。 Dim i As Integer, j As Integer Dim temp As Double Dim m As Integer For i = LBound(a) To UBound(a) - 1 '進行n-1輪比較
For j = UBound(a) To i + 1 Step -1 '從n到i個元素兩兩進行比較
If sheng Then '若次序不對,馬上進行交換
If a(j) < a(j - 1) Then temp = a(j) a(j) = a(j - 1) a(j - 1) = temp End If Else If a(j) > a(j - 1) Then temp = a(j) a(j) = a(j - 1) a(j - 1) = temp End If End If Next j '出了內循環,一輪排序結束 '最值元素冒到最上邊 Next i End Sub
調用該過程代碼基本同上。
2、實戰練習1) 補充代碼(2003秋二(10)) 下面是一個采用拉鋸式排序法對數組元素按升序進行排序的程序,所謂“拉鋸式排序法”是這一遍把最小的元素從下到上送到最上的位置,下一遍則是從上到下把最大的元素送到最下的位置。
Option Base 1 Private Sub Command1_Click() Dim a(10) As Integer,i As Integer For i = 1 To 10 a(i) = Int(Rnd * 10)+1 Text1 = Text1 & Str(a(i)) Next i Call shaker_sort(a) For i = 1 To 10 Text2 = Text2 & Str(a(i)) Next i End Sub
Private Sub Shaker_sort(k() As Integer) Dim i As Integer,c As Integer,d As Integer Dim t As Integer c = 1 d = (1) Do For (2) Step-1 If k(i=1)>k(i) Then t = k(i-1):k(i-1) = k(i):k(i) = t End If Next i (3) For i = c+1 To d If (4) Then t = k(i-1):k(i-1) = k(i):k(i) = t End If Next i d = d-1 Loop While (5) End Sub
2) 編程題(2002秋上機試卷04) 把文本框輸入的字符串按降序添加到列表框中。
|