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
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