VBA排序的10种方法之快速排序

2015-04-13 13:36 阅读 329 次 评论关闭

VBA排序的10种方法之快速排序

Public Sub QuickSort(ByRef lngArray() As Long)

Dim iLBound As Long

Dim iUBound As Long

Dim iTemp As Long

Dim iOuter As Long

Dim iMax As Long

iLBound = LBound(lngArray)

iUBound = UBound(lngArray)

'若只有一个值,不排序

If (iUBound - iLBound) Then

For iOuter = iLBound To iUBound

If lngArray(iOuter) > lngArray(iMax) Then iMax = iOuter

Next iOuter

iTemp = lngArray(iMax)

lngArray(iMax) = lngArray(iUBound)

lngArray(iUBound) = iTemp

'开始快速排序

InnerQuickSort lngArray, iLBound, iUBound

End If

End Sub

 

Private Sub InnerQuickSort(ByRef lngArray() As Long, ByVal iLeftEnd As Long, ByVal iRightEnd As Long)

Dim iLeftCur As Long

Dim iRightCur As Long

Dim iPivot As Long

Dim iTemp As Long

If iLeftEnd >= iRightEnd Then Exit Sub

iLeftCur = iLeftEnd

iRightCur = iRightEnd + 1

iPivot = lngArray(iLeftEnd)

Do

Do

iLeftCur = iLeftCur + 1

Loop While lngArray(iLeftCur) < iPivot

 

Do

iRightCur = iRightCur - 1

Loop While lngArray(iRightCur) > iPivot

If iLeftCur >= iRightCur Then Exit Do

'交换值

iTemp = lngArray(iLeftCur)

lngArray(iLeftCur) = lngArray(iRightCur)

lngArray(iRightCur) = iTemp

Loop

 

'递归快速排序

lngArray(iLeftEnd) = lngArray(iRightCur)

lngArray(iRightCur) = iPivot

InnerQuickSort lngArray, iLeftEnd, iRightCur - 1

InnerQuickSort lngArray, iRightCur + 1, iRightEnd

End Sub

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:VBA排序的10种方法之快速排序 | 猎微网
分类:VBA 标签:, ,

评论已关闭!