You want speed!?!?!?!?!?
The first set of times and average are the origional by bakerm
The second set of times are with the same code but with JohnYingling modification (see above)
The third set are with another modification by me (see below)
[tt]
Times = 166061761,160231141,160078293,159680381,159879365,159959931,160191433,160024302,174919423,159223220
Average = 162024925
Times = 84748409,94847657,84806582,89830338,95663209,100300661,99887388,92226552,84315037,84194352
Average = 91082018.5
Times = 81564598,78090568,77864194,79377720,77766780,78189523,78694670,77761008,77892423,77768372
Average = 78496985.6
[/tt]
The modifications are as follows...
I used JohnYingling's modification along with...
Change the loop integers to long and remove from the loop the ubound checks
[tt]
Public Sub Bubble_Sort_VB5(ByRef SortArray() As String)
Dim Temp As String
Dim I As Long, J As Long
Dim U As Long
U = UBound(SortArray)
For I = 0 To U
For J = I + 1 To U
If SortArray(I) < SortArray(J) Then
Temp = SortArray(I)
SortArray(I) = SortArray(J)
SortArray(J) = Temp
End If
Next J
Next I
End Sub
[/tt]
How the test was run...
[tt]
Option Explicit
Private Type LARGE_INTEGER
lowpart As Long
highpart As Long
End Type
Private Declare Function QueryPerformanceCounter Lib "kernel32" (lpPerformanceCount As LARGE_INTEGER) As Long
Private Sub Command1_Click()
Dim StartTime As LARGE_INTEGER, StopTime As LARGE_INTEGER
Dim Df1(1 To 10) As Variant
Dim SortArray(10000) As String, I As Long
Dim ReturnValue As Long, MyDec As Variant
MyDec = CDec(4294967296#)
For I = 1 To 10
InitializeArray SortArray
ReturnValue = QueryPerformanceCounter(StartTime)
Bubble_Sort SortArray
ReturnValue = QueryPerformanceCounter(StopTime)
Df1(I) = CDec(((MyDec * StopTime.highpart) + StopTime.lowpart) - ((MyDec * StartTime.highpart) + StartTime.lowpart))
Next I
Debug.Print "Times = " & Df1(1) & "," & Df1(2) & "," & Df1(3) & "," & Df1(4) & "," & Df1(5) & "," & Df1(6) & "," & Df1(7) & "," & Df1(8) & "," & Df1(9) & "," & Df1(10)
Debug.Print "Average = " & ((Df1(1) + Df1(2) + Df1(3) + Df1(4) + Df1(5) + Df1(6) + Df1(7) + Df1(8) + Df1(9) + Df1(10)) / 10)
For I = 1 To 10
InitializeArray SortArray
ReturnValue = QueryPerformanceCounter(StartTime)
Bubble_Sort_John SortArray
ReturnValue = QueryPerformanceCounter(StopTime)
Df1(I) = CDec(((MyDec * StopTime.highpart) + StopTime.lowpart) - ((MyDec * StartTime.highpart) + StartTime.lowpart))
Next I
Debug.Print "Times = " & Df1(1) & "," & Df1(2) & "," & Df1(3) & "," & Df1(4) & "," & Df1(5) & "," & Df1(6) & "," & Df1(7) & "," & Df1(8) & "," & Df1(9) & "," & Df1(10)
Debug.Print "Average = " & ((Df1(1) + Df1(2) + Df1(3) + Df1(4) + Df1(5) + Df1(6) + Df1(7) + Df1(8) + Df1(9) + Df1(10)) / 10)
For I = 1 To 10
InitializeArray SortArray
ReturnValue = QueryPerformanceCounter(StartTime)
Bubble_Sort_VB5 SortArray
ReturnValue = QueryPerformanceCounter(StopTime)
Df1(I) = CDec(((MyDec * StopTime.highpart) + StopTime.lowpart) - ((MyDec * StartTime.highpart) + StartTime.lowpart))
Next I
Debug.Print "Times = " & Df1(1) & "," & Df1(2) & "," & Df1(3) & "," & Df1(4) & "," & Df1(5) & "," & Df1(6) & "," & Df1(7) & "," & Df1(8) & "," & Df1(9) & "," & Df1(10)
Debug.Print "Average = " & ((Df1(1) + Df1(2) + Df1(3) + Df1(4) + Df1(5) + Df1(6) + Df1(7) + Df1(8) + Df1(9) + Df1(10)) / 10)
End Sub
Private Sub InitializeArray(ByRef SortArray() As String)
Randomize
Dim I As Long
For I = 0 To 10000
SortArray(I) = Trim(Str(Int((1000 * Rnd(I)) + 1)))
Next I
End Sub
Public Sub Bubble_Sort(ByRef SortArray() As String)
Dim Temp As String
Dim I As Integer, J As Integer
For I = 0 To UBound(SortArray)
For J = 0 To UBound(SortArray)
If SortArray(I) < SortArray(J) Then
Temp = SortArray(I)
SortArray(I) = SortArray(J)
SortArray(J) = Temp
End If
Next J
Next I
End Sub
Public Sub Bubble_Sort_John(ByRef SortArray() As String)
Dim Temp As String
Dim I As Integer, J As Integer
For I = 0 To UBound(SortArray)
For J = I + 1 To UBound(SortArray)
If SortArray(I) < SortArray(J) Then
Temp = SortArray(I)
SortArray(I) = SortArray(J)
SortArray(J) = Temp
End If
Next J
Next I
End Sub
Public Sub Bubble_Sort_VB5(ByRef SortArray() As String)
Dim Temp As String
Dim I As Long, J As Long
Dim U As Long
U = UBound(SortArray)
For I = 0 To U
For J = I + 1 To U
If SortArray(I) < SortArray(J) Then
Temp = SortArray(I)
SortArray(I) = SortArray(J)
SortArray(J) = Temp
End If
Next J
Next I
End Sub
[/tt]
Have Fun And Good Luck