排序问题
来源:互联网 发布:java sleep函数单位 编辑:程序博客网 时间:2024/05/17 02:21
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
- 排序问题-归并排序
- 排序问题-快速排序
- 【排序问题】选择排序
- 排序问题
- 排序 问题
- 排序问题
- 排序问题~~
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 排序 问题
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 如何使用Logmnr方法分析数据库日志
- 在Linux系统下如何优化Oracle具体步骤
- Oracle数据库删除两表中相同数据的方法
- 保持Oracle数据优良性能的若干诀窍
- 构建高性能Oracle运行系统的原则
- 排序问题
- Oracle语句优化53个规则详解
- 11g的Memory_target与自动内存管理
- ORACLE常见问题诊断方法(SQL*NET篇)
- Oracle中表的连接及其调整
- 工作!!!
- C#数据库操作的三种经典用法
- C#基础学习——异步编程篇
- 在Vista中编程控制防火墙设定