計(jì)算機(jī)等級(jí)考試二級(jí)VB常用算法(6):排序

字號(hào):

1、算法說(shuō)明
    1) 選擇法排序
    (1) 從n個(gè)數(shù)中選出最小數(shù)的下標(biāo),出了循環(huán),將最小數(shù)與第一個(gè)數(shù)交換位置;
    (2) 除第一個(gè)數(shù)外,在剩下的n-1個(gè)數(shù)中再按方法(1)選出次小的數(shù),與第二個(gè)數(shù)交換位置;
    (3) 以此類(lèi)推,最后構(gòu)成遞增序列。
    譬如:
     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
    第五輪無(wú)交換 2 3 6 7 8 9
    程序代碼如下:
    Private Sub xzPaiXu(a() As Double, sheng As Boolean)
     'a為需要排序的數(shù)組,sheng為T(mén)rue則為升序排列,為False,則為降序排列。
     Dim i As Integer, j As Integer
     Dim temp As Double
     Dim m As Integer
     For i = LBound(a) To UBound(a) - 1 '進(jìn)行數(shù)組大小-1輪比較
     m = i '在第i輪比較時(shí),假定第 'i個(gè)元素為最值元素
     For j = i + 1 To UBound(a) '在剩下的元素中找出最 '值元素的下標(biāo)并記錄在m中
     If sheng Then '若為升序,則m記錄最小元素 '下標(biāo),否則記錄元素下標(biāo)
     If a(j) < a(m) Then m = j
     Else
     If a(j) > a(m) Then m = j
     End If
     Next j '將最值元素與第i個(gè)元素交換
     temp = a(i)
     a(i) = a(m)
     a(m) = temp
     Next i
    End Sub
    調(diào)用該過(guò)程示例:
    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