1、算法說明
1) 選擇法排序
(1) 從n個數(shù)中選出最小數(shù)的下標,出了循環(huán),將最小數(shù)與第一個數(shù)交換位置;
(2) 除第一個數(shù)外,在剩下的n-1個數(shù)中再按方法(1)選出次小的數(shù),與第二個數(shù)交換位置;
(3) 以此類推,最后構(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
第五輪無交換 2 3 6 7 8 9
程序代碼如下:
Private Sub xzPaiXu(a() As Double, sheng As Boolean)
'a為需要排序的數(shù)組,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 '進行數(shù)組大小-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
1) 選擇法排序
(1) 從n個數(shù)中選出最小數(shù)的下標,出了循環(huán),將最小數(shù)與第一個數(shù)交換位置;
(2) 除第一個數(shù)外,在剩下的n-1個數(shù)中再按方法(1)選出次小的數(shù),與第二個數(shù)交換位置;
(3) 以此類推,最后構(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
第五輪無交換 2 3 6 7 8 9
程序代碼如下:
Private Sub xzPaiXu(a() As Double, sheng As Boolean)
'a為需要排序的數(shù)組,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 '進行數(shù)組大小-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