Сортировка массива...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kolobuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 24.10.2006 (Вт) 20:03

Сортировка массива...

Сообщение Kolobuk » 15.01.2008 (Вт) 4:07

Здравствуйте!

Сортирую массив методом Шелла:

Код: Выделить всё
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 часа бьюсь над этим, где только не искал. Хотя догадываюсь - дело то не сложное :)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.01.2008 (Вт) 8:09

Параллельно с сортировкой основного массива менять индексы в массиве целых чисел. Изначально массив должен содержать последовательность 0, 1, 2, ... N, а после сортировки будет содержать индексы в отсортированном порядке.
Весь мир матрица, а мы в нем потоки байтов!

Kolobuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 24.10.2006 (Вт) 20:03

Сообщение Kolobuk » 15.01.2008 (Вт) 8:57

Спасибо!
Действительно всё просто.
И утро вечера мудренее всё таки :D

Код: Выделить всё
...
Tmp = Arr(J).X
Tmp2 = Arr(J).N
Arr(J).X = Arr(J + G).X
Arr(J).N = Arr(J + G).N
Arr(J + G).X = Tmp
Arr(J + G).N = Tmp2
...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 68

    TopList  
cron