home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic 6 Unleashed…sional Reference Edition) / Visual_Basic_6_Unleashed_Professional_Reference_Edition_Sams_1999.iso / Source / CHAP36 / 309X3801.TXT next >
Encoding:
Text File  |  1998-04-29  |  3.1 KB  |  85 lines

  1.  
  2. Public Sub QuickSort(lonLower, lonUpper)
  3.  
  4. Dim lonRandomPivot As Long
  5. Dim lonTempLower As Long
  6. Dim lonTempUpper As Long
  7. Dim strLastItem As String
  8. Dim strTempItem As String
  9.  
  10. Randomize Timer
  11.  
  12. ' Only sort if the lower boundary is lesser
  13. ' than the upper boundary.
  14. If lonLower < lonUpper Then
  15.     If lonUpper - lonLower = 1 Then
  16.         ' Switch the upper and lower array items
  17.         ' if the lower is greater than the upper.
  18.         If strArray(lonLower) > strArray(lonUpper) Then
  19.             strTempItem = strArray(lonUpper)
  20.             strArray(lonUpper) = strArray(lonLower)
  21.             strArray(lonLower) = strTempItem
  22.         End If
  23.     Else
  24.         ' Pick a random "pivot" item.
  25.         lonRandomPivot = Int(Rnd _
  26.             * (lonUpper - lonLower + 1)) + lonLower
  27.         ' Switch the upper array item with the
  28.         ' pivot item.
  29.         strTempItem = strArray(lonUpper)
  30.         strArray(lonUpper) = strArray(lonRandomPivot)
  31.         strArray(lonRandomPivot) = strTempItem
  32.         ' Store the upper array item.
  33.         strLastItem = strArray(lonUpper)
  34.         Do
  35.             ' Define the temporary upper and
  36.             ' lower boundaries.
  37.             lonTempUpper = lonUpper
  38.             lonTempLower = lonLower
  39.             ' Move down towards the pivot item,
  40.             ' looping until the pivot item is greater
  41.             ' than or equal to the temporary
  42.             ' lower boundary.
  43.             Do While (lonTempLower < lonTempUpper) And _
  44.                 (strArray(lonTempLower) <= strLastItem)
  45.                     lonTempLower = lonTempLower + 1
  46.             Loop
  47.             ' Move up towards the pivot item, looping
  48.             ' until the pivot item is less than
  49.             ' or equal to the temporary upper
  50.             ' boundary.
  51.             Do While (lonTempUpper > lonTempLower) And _
  52.                 (strArray(lonTempUpper) >= strLastItem)
  53.                     lonTempUpper = lonTempUpper - 1
  54.             Loop
  55.             ' If the pivot item hasn't been
  56.             ' reached, then two of the items on
  57.             ' either side of the pivot are out
  58.             ' of order. If so, then switch them.
  59.             If lonTempLower < lonTempUpper Then
  60.                 strTempItem = strArray(lonTempUpper)
  61.                 strArray(lonTempUpper) = strArray(lonTempLower)
  62.                 strArray(lonTempLower) = strTempItem
  63.             End If
  64.         Loop While (lonTempLower < lonTempUpper)
  65.         ' Switch the temporary lower boundary
  66.         ' item with the original upper boundary
  67.         ' item.
  68.         strTempItem = strArray(lonTempLower)
  69.         strArray(lonTempLower) = strArray(lonUpper)
  70.         strArray(lonUpper) = strTempItem
  71.         ' Call the QuickSort routine again
  72.         ' recursively, using new upper and
  73.         ' lower boundaries.
  74.         If (lonTempLower - lonLower) < (lonUpper - lonTempLower) Then
  75.             QuickSort lonLower, lonTempLower - 1
  76.             QuickSort lonTempLower + 1, lonUpper
  77.         Else
  78.             QuickSort lonTempLower + 1, lonUpper
  79.             QuickSort lonLower, lonTempLower - 1
  80.         End If
  81.     End If
  82. End If
  83.  
  84. End Sub
  85.