Как отсортировать одномерный массив по алфавиту?

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

Как отсортировать одномерный массив по алфавиту?

Сообщение Vladlex » 12.02.2008 (Вт) 16:31

Извините, я, наверное, туплю к ночи, но что-то не доходит..
Вот есть массив, допустим mass1. Как отсортировать его элементы в алфавитном порядке?

Я так понимаю, легче всего отсортированные значения вносить в новый массив? Как вообще выглядит алгоритм сортировки по алфавиту на VB?
Человек - дитя препятствий. Блан де Сент-Бонне.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 12.02.2008 (Вт) 16:40

Vladlex
Алгоритмов сортировки - тьма. Каждый из них на VB как-то выглядит. Какой из них тебя интересует?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vladlex
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.02.2008 (Вт) 16:01
Откуда: Владивосток

Сообщение Vladlex » 12.02.2008 (Вт) 16:46

Работающий... )
Шучу.
Мне, в общем, все равно, пузырьковый там будет или какой-то иной.

Желательно, какой-нибудь попроще, мне еще разбираться с ним, а я пока только начинающий.

В идеале задача стоит так (если не вдаваться в подробности)
Есть два массива, со значениями, соответствующими друг другу.
Т.е. если после сортировки в массиве1 меняются местами третий и первый элемент, то в массиве2 должно произойти то же самое.
Человек - дитя препятствий. Блан де Сент-Бонне.

Vladlex
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.02.2008 (Вт) 16:01
Откуда: Владивосток

Сообщение Vladlex » 12.02.2008 (Вт) 17:09

Вот, допустим, механизм сортировки, отдельным модулем:

Код: Выделить всё

Sub SortString(vArray() As String, vArray2() As String)
  Dim TempVal As String
  Dim i&, GapSize&, CurPos&, FirstRow&, LastRow&, NumRows&
  FirstRow = LBound(vArray)
  LastRow = UBound(vArray)
  NumRows = LastRow - FirstRow + 1
    Do
        GapSize = GapSize * 3 + 1
    Loop Until GapSize > NumRows
    Do
        GapSize = GapSize \ 3
        For i = GapSize + FirstRow To LastRow
            CurPos = i
            TempVal = vArray(i)
            Do While vArray(CurPos - GapSize) > TempVal
                vArray(CurPos) = vArray(CurPos - GapSize)
               '''Возможно, сюда?
                CurPos = CurPos - GapSize
                If (CurPos - GapSize) < FirstRow Then Exit Do
            Loop
            vArray(CurPos) = TempVal
        Next
    Loop Until GapSize = 1
   End Sub

где vArray() - сортируемый массив, а vArray2(), тот, чьи значения должны быть перемещены аналогично перемещениям в vArray()
Где и как в модуль включить изменения второго массива вслед за изменениями первого? Я понимаю, что в месте, которое я отметил, но не понимаю как. Если вписать в это место
vArray2(CurPos) = vArray2(CurPos - GapSize), то сортировка получается неправильно. Мда.. надеюсь, простите меня за такие вопросы )
Человек - дитя препятствий. Блан де Сент-Бонне.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 12.02.2008 (Вт) 17:11

Мне, в общем, все равно, пузырьковый там будет или какой-то иной.
http://bbs.vbstreets.ru/viewtopic.php?t=35396
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vladlex
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 12.02.2008 (Вт) 16:01
Откуда: Владивосток

Сообщение Vladlex » 13.02.2008 (Ср) 10:28

Значит, применительно к моему случаю конкретно это будет вот так:

Код: Выделить всё
Public Sub Swap(ByRef a As String, ByRef b As String)
    Dim c As String
    c = a
    a = b
    b = c
End Sub

Sub SortString(ByRef vArray() As String, varray2() As String)
  Dim willSwap As Boolean
  Dim i As Integer
    Do
        willSwap = False
        For i = LBound(vArray) To UBound(vArray) - 1
            If vArray(i) > vArray(i + 1) Then
                willSwap = True
                Swap vArray(i), vArray(i + 1)
                Swap varray2(i), varray2(i + 1)
            End If
        Next i
    Loop While willSwap

   End Sub


Спасибо, работает )))
Человек - дитя препятствий. Блан де Сент-Бонне.


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 101

    TopList