Forum Moderators: coopster & phranque

Message Too Old, No Replies

Sort by date using an array with a bubble sort

         

shakes911

3:42 pm on Mar 6, 2001 (gmt 0)



I just can't get it to work, this is my code:

<%
Sub DateSorter(byRef arrArray)

For i = 0 To UBound(arrArray) - 1
smallest_value = arrArray (i)
rememberkey = arrArray (i)
rememberval = arrArray (i)
swap_pos = i

For x = i + 1 to UBound(arrArray)
If arrArray (x) < smallest_value Then
swap_pos = x
smallest_value = arrArray (x)
smallest_key = arrArray (x)
End If
Next

If swap_pos <> i Then
arrArray (swap_pos) = rememberkey
arrArray (swap_pos) = rememberval
arrArray (i) = smallest_key
arrArray (i) = smallest_value
End If
Response.Write(arrArray(i) & "<BR>")
Next

End Sub
%>

<%
Set Myfso = Server.CreateObject("Scripting.FileSystemObject")
varDateFile = Server.MapPath("EV/events.txt")
Set DateFile = Myfso.OpenTextFile(varDateFile,1)
%>
Sorted List:<p>
<%
Do until DateFile.AtEndOfStream
data = DateFile.ReadAll
Loop
temp = split((data),"_")
Call DateSorter(temp)
End If
%>

Any ideas?

Xoc

5:43 pm on Mar 6, 2001 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



That bubble sort is incredibly inefficient. Order N2. So while I might be able to debug it for you, I'd rather point you at a better sorting algorithm: QuickSort. QuickSort is order N log N.

You call it with:

Call QuickSort(varArray, LBound(varArray), UBound(varArray))


Sub QuickSort(avarValues, iavarValuesFirst, iavarValuesLast)
Dim iavarValuesPivot
Dim iavarValuesSwapFirst
Dim iavarValuesSwapLast
Dim varSwap

If iavarValuesLast - iavarValuesFirst = 1 Then
If avarValues(iavarValuesFirst) > avarValues(iavarValuesLast) Then
varSwap = avarValues(iavarValuesFirst)
avarValues(iavarValuesFirst) = avarValues(iavarValuesLast)
avarValues(iavarValuesLast) = varSwap
End If
End If

iavarValuesPivot = avarValues((iavarValuesFirst + iavarValuesLast) \ 2)
avarValues((iavarValuesFirst + iavarValuesLast) \ 2) = avarValues(iavarValuesFirst)
avarValues(iavarValuesFirst) = iavarValuesPivot
iavarValuesSwapFirst = iavarValuesFirst + 1
iavarValuesSwapLast = iavarValuesLast

Do
Do While iavarValuesSwapFirst < iavarValuesSwapLast _
And avarValues(iavarValuesSwapFirst) <= iavarValuesPivot
iavarValuesSwapFirst = iavarValuesSwapFirst + 1
Loop
Do While avarValues(iavarValuesSwapLast) > iavarValuesPivot
iavarValuesSwapLast = iavarValuesSwapLast - 1
Loop
If iavarValuesSwapFirst < iavarValuesSwapLast Then
varSwap = avarValues(iavarValuesSwapFirst)
avarValues(iavarValuesSwapFirst) = avarValues(iavarValuesSwapLast)
avarValues(iavarValuesSwapLast) = varSwap
End If
Loop While iavarValuesSwapFirst < iavarValuesSwapLast

avarValues(iavarValuesFirst) = avarValues(iavarValuesSwapLast)
avarValues(iavarValuesSwapLast) = iavarValuesPivot

If iavarValuesFirst < (iavarValuesSwapLast - 1) Then
Call QuickSort(avarValues, iavarValuesFirst, iavarValuesSwapLast - 1)
End If
If iavarValuesSwapLast + 1 < iavarValuesLast Then
Call QuickSort(avarValues, iavarValuesSwapLast + 1, iavarValuesLast)
End If
End Sub

shakes911

9:47 am on Mar 7, 2001 (gmt 0)



Thanks ever so much Xoc, this is greatly appreciated.