Home |
Search |
Today's Posts |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Function QuickSortString(arrString() As String, _
Optional lLow1 = -1, _ Optional lhigh1 = -1) 'Dimension variables Dim lLow2 As Long Dim lhigh2 As Long Dim strVal1 As String Dim strVal2 As String 'If first time, get the size of the array to sort If lLow1 = -1 Then lLow1 = LBound(arrString, 1) End If If lhigh1 = -1 Then lhigh1 = UBound(arrString, 1) End If 'Set new extremes to old extremes lLow2 = lLow1 lhigh2 = lhigh1 'Get value of array item in middle of new extremes strVal1 = arrString((lLow1 + lhigh1) / 2) 'Loop for all the items in the array between the extremes While (lLow2 <= lhigh2) 'Find the first item that is greater than the mid-point item While (arrString(lLow2) < strVal1 And lLow2 < lhigh1) lLow2 = lLow2 + 1 Wend 'Find the last item that is less than the mid-point item While (arrString(lhigh2) strVal1 And lhigh2 lLow1) lhigh2 = lhigh2 - 1 Wend 'If the new 'greater' item comes before the new 'less' item, swap them If (lLow2 <= lhigh2) Then strVal2 = arrString(lLow2) arrString(lLow2) = arrString(lhigh2) arrString(lhigh2) = strVal2 'Advance the pointers to the next item lLow2 = lLow2 + 1 lhigh2 = lhigh2 - 1 End If Wend 'Iterate to sort the lower half of the extremes If (lhigh2 lLow1) Then Call QuickSortString(arrString, lLow1, lhigh2) 'Iterate to sort the upper half of the extremes If (lLow2 < lhigh1) Then Call QuickSortString(arrString, lLow2, lhigh1) QuickSortString = arrString End Function There is actually a way to do this much faster, but that needs coding in VB6. Will see if I can post it later. RBS "Deke" wrote in message ... I have been reading thru various post on the forum about sorting large arrays and most of the post seem to be about integer arrays. I have found some links and comments about string arrays, but none of them are exactly what I'm looking for and I'm having some trouble re-writing the code to get them to work. Basically, I'm needing a routine that can sort a string array containing approx 1.5 million elements. As I said, I have had a look around and a quick sort seems to be the best method to use for this size of array. I have the code for a quick sort written by Jim Rech in 1998, but this is for a 2 dimensional array, where mine is just a single dimension. If I can get the array sorted, then this is going to make processing of the input file alot quicker. Hopefully some one can help. Many thanks in advance... -- Cheers... |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
sorting text in a string | Excel Programming | |||
Sorting By Largest Value In A String | Excel Programming | |||
Passing a String in Array to Range as String | Excel Programming | |||
string sorting problem | Excel Programming | |||
sorting data in string | Excel Programming |