Honestvip
دوشنبه 14 اردیبهشت 1394, 08:00 صبح
سلام دوستان بنده کد الگوریتم Quick sort رو دارم
ولی نمیدونم چطوری در فرم اکسس مثلا در یک لیست باکس ازش استفاده کنم
Option Compare Database
Private Sub QuickSort(ByRef Values As Variant, Optional ByVal Left As Long, Optional ByVal Right As Long)
Dim i As Long
Dim j As Long
Dim K As Long
Dim Item1 As Variant
Dim Item2 As Variant
On Error GoTo Catch
If IsMissing(Left) Or Left = 0 Then Left = LBound(Values)
If IsMissing(Right) Or Right = 0 Then Right = UBound(Values)
i = Left
j = Right
Item1 = Values((Left + Right) \ 2, 2)
Do While i < j
Do While Values(i, 2) < Item1 And i < Right
i = i + 1
Loop
Do While Values(j, 2) > Item1 And j > Left
j = j - 1
Loop
If i < j Then
Call Swap(Values, i, j)
End If
If i <= j Then
i = i + 1
j = j - 1
End If
Loop
If j > Left Then Call QuickSort(Values, Left, j)
If i < Right Then Call QuickSort(Values, i, Right)
Exit Sub
Catch:
MsgBox Err.Description, vbCritical
End Sub
Private Sub Swap(ByRef Values As Variant, ByVal i As Long, ByVal j As Long)
Dim Temp1 As Double
Dim Temp2 As Double
Temp1 = Values(i, 1)
Temp2 = Values(i, 2)
Values(i, 1) = Values(j, 1)
Values(i, 2) = Values(j, 2)
Values(j, 1) = Temp1
Values(j, 2) = Temp2
End Sub
ولی نمیدونم چطوری در فرم اکسس مثلا در یک لیست باکس ازش استفاده کنم
Option Compare Database
Private Sub QuickSort(ByRef Values As Variant, Optional ByVal Left As Long, Optional ByVal Right As Long)
Dim i As Long
Dim j As Long
Dim K As Long
Dim Item1 As Variant
Dim Item2 As Variant
On Error GoTo Catch
If IsMissing(Left) Or Left = 0 Then Left = LBound(Values)
If IsMissing(Right) Or Right = 0 Then Right = UBound(Values)
i = Left
j = Right
Item1 = Values((Left + Right) \ 2, 2)
Do While i < j
Do While Values(i, 2) < Item1 And i < Right
i = i + 1
Loop
Do While Values(j, 2) > Item1 And j > Left
j = j - 1
Loop
If i < j Then
Call Swap(Values, i, j)
End If
If i <= j Then
i = i + 1
j = j - 1
End If
Loop
If j > Left Then Call QuickSort(Values, Left, j)
If i < Right Then Call QuickSort(Values, i, Right)
Exit Sub
Catch:
MsgBox Err.Description, vbCritical
End Sub
Private Sub Swap(ByRef Values As Variant, ByVal i As Long, ByVal j As Long)
Dim Temp1 As Double
Dim Temp2 As Double
Temp1 = Values(i, 1)
Temp2 = Values(i, 2)
Values(i, 1) = Values(j, 1)
Values(i, 2) = Values(j, 2)
Values(j, 1) = Temp1
Values(j, 2) = Temp2
End Sub