選擇排序(Selection sorting)
類似於氣泡排序法。主要差異在於,第n回合比較時,以一額外資料空間儲存目前第n大(小),若發現資料順序不對,就將資料互換。依次由上往下比,則結果將由最大(最小)逐回合比較至最小(最大)。
【分析】
1. 比較之回合數=資料數(n)-1。
2. 時間複製度:最差與平均時間O(n2)
3. 需要一個額外(元素)空間。
4. 為一穩定排序。
5. 資料量小時,使用效果佳(優於氣泡)。
【原理】
1. 未排序前之第一筆資料可視為已排序好之資料
2. 每一回合逐一比較相臨資料,依排序之順序交換位置。
【演算法】
SelSort(int A[], int n) //選擇排序法之副程式
{
int i, j, Temp, NP = 0;
for (i = 1; i <= n - 1; i++)
{
NP = i;
for (j = i + 1; j <= n; j++)
if (A[j] > A[NP]) NP = j;
{//相鄰兩個的資料交換位置
Temp = A[i];
A[i] = A[NP];
A[NP] = Temp;
}
}
}
Public Class Form1
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim SortResult As String = ""
Dim Data(7) As Integer
Dim I, J, K As Integer, Buffer As Integer
Dim MinIdx As Integer = 0
Data(0) = Val(TextBox1.Text)
Data(1) = Val(TextBox2.Text)
Data(2) = Val(TextBox3.Text)
Data(3) = Val(TextBox4.Text)
Data(4) = Val(TextBox5.Text)
Data(5) = Val(TextBox6.Text)
Data(6) = Val(TextBox7.Text)
Data(7) = Val(TextBox8.Text)
For I = 0 To UBound(Data) - 1
For K = 0 To UBound(Data)
TextBox9.Text &= (I + 1).ToString & ". Data" & (K + 1).ToString & "=" & CStr(Data(K)) & "__"
Next
MinIdx = I
For J = I To UBound(Data)
If Data(J) < Data(MinIdx) Then
MinIdx = J
End If
Next
Buffer = Data(I)
Data(I) = Data(MinIdx)
Data(MinIdx) = Buffer
TextBox9.Text &= vbCrLf
Next
For I = 0 To UBound(Data)
SortResult &= CStr(Data(I)) & ","
Next
TextBox9.Text &= vbCrLf & "最後排序結果" & vbCrLf & (SortResult)
End Sub
End Class
沒有留言:
張貼留言