指针快速排序 - [Visual Basic]
Tag: 常用算法
2009年05月11日
运用了指针技术的快速排序模块。指针操作是交换字符串用。
Option Explicit
Private Declare Sub GetMem4 Lib "msvbvm60.dll" (ByRef SrcRef As Long, ByRef DstRef As Long)
Public Sub SwapString(a As String, b As String)
Dim pT As Long, pA As Long, pB As Long
pT = StrPtr(a): pA = VarPtr(a): pB = VarPtr(b)
GetMem4 ByVal pB, ByVal pA
GetMem4 pT, ByVal pB
End Sub
Public Sub QuickSortStr(ByRef arr() As String, ByVal l As Long, ByVal r As Long)
Dim i As Long, j As Long
Dim x As String
i = l: j = r
x = arr((l + r) \ 2)
Do
While arr(i) < x: i = i + 1: Wend
While arr(j) > x: j = j - 1: Wend
If i <= j Then
SwapString arr(i), arr(j)
i = i + 1: j = j - 1
End If
Loop Until i > j
If i < r Then Call QuickSortStr(arr, i, r)
If l < j Then Call QuickSortStr(arr, l, j)
End Sub
Public Sub QuickSortLng(ByRef arr() As Long, ByVal l As Long, ByVal r As Long)
Dim i As Long, j As Long
Dim x As Long, y As Long
i = l: j = r
x = arr((l + r) \ 2)
Do
While arr(i) < x: i = i + 1: Wend
While x < arr(j): j = j - 1: Wend
If i <= j Then
y = arr(i): arr(i) = arr(j): arr(j) = y
i = i + 1: j = j - 1
End If
Loop Until i > j
If i < r Then Call QuickSortLng(arr, i, r)
If l < j Then Call QuickSortLng(arr, l, j)
End Sub




