Сортирую массив методом Шелла:
- Код: Выделить всё
Public Sub ShellSort(ByRef Arr() As Single, ByVal N As Long)
Dim C As Boolean
Dim E As Long
Dim G As Long
Dim I As Long
Dim J As Long
Dim Tmp As Single
N = N - 1#
G = (N + 1#) \ 2#
Do
I = G
Do
J = I - G
C = True
Do
If Arr(J) <= Arr(J + G) Then
C = False
Else
Tmp = Arr(J)
Arr(J) = Arr(J + G)
Arr(J + G) = Tmp
End If
J = J - 1#
Loop Until Not (J >= 0# And C)
I = I + 1#
Loop Until Not I <= N
G = G \ 2#
Loop Until Not G > 0#
End Sub
Отлично и быстро сортируется. А есть ли метод сортировки, чтобы сохранились старые индексы?
Т.е., был массив:
- Код: Выделить всё
Dim MAS(4) as Single
MAS(0) = 5
MAS(1) = -3
MAS(2) = -1
MAS(3) = 0
Я его отсортировал, получилось:
- Код: Выделить всё
MAS(0) = -3
MAS(1) = -1
MAS(2) = 0
MAS(3) = 5
Как бы узнать, что именно индекс (1) несортированного массива, содержит наименьшее число, (0) - наибольшее и т.д.
-----------
В поиске был! Поверьте, уже 3 часа бьюсь над этим, где только не искал. Хотя догадываюсь - дело то не сложное