Оригинальные алгоритмы

Алгоритм быстрой сортировки чисел в массиве

Данный алгоритм реализует сортировку массива на основе сравнения чисел со случайно выбранным числом из массива. Особенно быстро проходит сортировка массивов с большим разбросом значений чисел. Функцию сортировки выполняет процедура SortArray, остальные процедуры вспомогательные.


Public Sub SortArray(ByRef Arr() As Double, ByVal Low As Long, ByVal High As Long)
Dim RandIndex As Long
Dim Prt As Double
Static I As Long, J As Long

 If Low < High Then

  If High - Low = 1 Then

   If Arr(Low) > Arr(High) Then
    Swap Arr(Low), Arr(High)
   End If

 Else
  RandIndex = RandInt(Low, High)
  Swap Arr(High), Arr(RandIndex)
  Prt = Arr(High)   

   Do
    I = Low:J = High

    Do While (I < J) And (Arr(I) <= Prt)
     I = I + 1
    Loop

    Do While (J > I) And (Arr(J) >= Prt)
     J = J - 1
    Loop

    If I < J Then
     Swap Arr(I), Arr(J)
    End If

   Loop While I < J

   Swap Arr(I), Arr(High)

   If (I - Low) < (High - I) Then
    SortArray Arr(), Low, I - 1
    SortArray Arr(), I + 1, High
   Else
    SortArray Arr(), I + 1, High
    SortArray Arr(), Low, I - 1
   End If

  End If

 End If

End Sub

Private Function RandInt(ByVal Lower As Long, ByVal Upper As Long) As Long
   RandInt = Int(Rnd * (Upper - Lower + 1)) + Lower
End Function

Private Sub Swap(ByRef Expr1#, ByRef Expr2#)
 Dim Temp#
 Temp = Expr2
 Expr2 = Expr1
 Expr1 = Temp
End Sub


Аргументы процедуры:

  • Arr() – собственно массив, который нужно сортировать. Массив должен быть типа double.
  • Low, High – Нижний и верхний индексы участка который сортируется. Тип long.

Готовый модуль с процедурой можно взять здесь [1kb zip].  

Юрасов Михаил Написать письмо 


   
Hosted by uCoz