Enum SortOrder
''' <summary>
''' 上升排列,重元素下轻元素上
''' </summary>
''' <remarks></remarks>
Ascending
''' <summary>
''' 下降排列,轻上重下
''' </summary>
''' <remarks></remarks>
Descending
End Enum
Sub BubbleSort(ByVal array As Array, ByVal order As SortOrder)
Dim Index As Integer = 0
Dim NextElementIndex As Integer = 0
Dim PElement As Integer = 0
Dim CElement As Integer = 0
Dim Size As Integer = array.Length - 1
Do While NextElementIndex < Size
Index = Size
Do While Index > NextElementIndex
PElement = array(Index - 1)
CElement = array(Index)
If order = SortOrder.Ascending Then
If CElement < PElement Then
array(Index) = PElement
array(Index - 1) = CElement
End If
ElseIf order = SortOrder.Descending Then
If CElement >= PElement Then
array(Index) = PElement
array(Index - 1) = CElement
End If
End If
Index -= 1
Loop
NextElementIndex += 1
Loop
CElement = Nothing
PElement = Nothing
End Sub
Private Sub BucketSort(ByVal array As Array, ByVal order As SortOrder)
Dim Index As Integer = 0
Dim NextElementIndex As Integer = 0
Dim Bucket As Integer = 0
Dim Size As Integer = array.Length
NextElementIndex = 1
Do While NextElementIndex <= Size - 1
Bucket = array(NextElementIndex)
Index = NextElementIndex
Do While True
If Index > 0 Then
If order = SortOrder.Ascending Then
If Bucket < array(Index - 1) Then
array(Index) = array(Index - 1)
Index -= 1
Else
Exit Do
End If
ElseIf order = SortOrder.Descending Then
If Bucket >= array(Index - 1) Then
array(Index) = array(Index - 1)
Index -= 1
Else
Exit Do
End If
End If
Else
Exit Do
End If
Loop
'每次比较得到大的元素到达合适位置
array(Index) = Bucket
NextElementIndex += 1
Loop
End Sub
Sub SelectionSort(ByVal array As Array, ByVal order As SortOrder)
Dim Index As Integer = 0
Dim MinElementIndex As Integer = 0
Dim NextElementIndex As Integer = 0
Dim SwapVar As Integer = 0
Dim Size As Integer = array.Length
Do While NextElementIndex < Size - 1
MinElementIndex = Size - 1
Index = MinElementIndex - 1
While Index >= NextElementIndex
If order = SortOrder.Ascending Then
If array(Index) < array(MinElementIndex) Then
MinElementIndex = Index
End If
ElseIf order = SortOrder.Descending Then
If array(Index) >= array(MinElementIndex) Then
MinElementIndex = Index
End If
End If
Index -= 1
End While
'交换元素
SwapVar = array(MinElementIndex)
array(MinElementIndex) = array(NextElementIndex)
array(NextElementIndex) = SwapVar
NextElementIndex += 1
Loop
End Sub
Sub InsertionSort(ByVal array As Array, ByVal order As SortOrder)
Dim Index As Integer
Dim SwapVar As Integer
Dim NextElementIndex As Integer
Dim Size As Integer = array.Length
'先比较2个元素大小,然后范围不断扩大
NextElementIndex = 1
While NextElementIndex <= Size - 1
Index = NextElementIndex
Do
If Index > 0 Then
If order = SortOrder.Ascending Then
If array(Index) < array(Index - 1) Then
SwapVar = array(Index)
array(Index) = array(Index - 1)
array(Index - 1) = SwapVar
Index -= 1
Else
Exit Do
End If
ElseIf order = SortOrder.Descending Then
If array(Index) >= array(Index - 1) Then
SwapVar = array(Index)
array(Index) = array(Index - 1)
array(Index - 1) = SwapVar
Index -= 1
Else
Exit Do
End If
End If
Else
Exit Do
End If
Loop
NextElementIndex += 1
End While
End Sub
Sub QuickSort(ByVal array As Array, ByVal firstIndex As Integer, ByVal lastIndex As Integer)
Dim F, L As Integer, midPoint, Y As ValueType
F = firstIndex
L = lastIndex
'得到分界值
midPoint = array((firstIndex + lastIndex) / 2)
While F <= L
'分区
While array(F) < midPoint AndAlso F < lastIndex
F += 1
End While
While midPoint < array(L) AndAlso L > firstIndex
L -= 1
End While
If F <= L Then
Y = array(F)
array(F) = array(L)
array(L) = Y
F += 1
L -= 1
End If
End While
If (firstIndex < L) Then Call QuickSort(array, firstIndex, L)
If (F < lastIndex) Then Call QuickSort(array, F, lastIndex)
End Sub