Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Как программно вкл/выкл List1.Sorte Добавлено: 28.01.05 10:05  

Автор вопроса:  VladeD

Ответить

  Ответы Всего ответов: 29  

Номер ответа: 16
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #16
Добавлено: 17.02.05 17:36
Ну да. Именно это и называется сортировкой вставками, сперва бинарный поиск по массиву сложностью O(log2N), потом сдвиг массива сложностью O(N).

Ответить

Номер ответа: 17
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #17 Добавлено: 17.02.05 18:12
Эх, блин, как это по-русски :)))

Ну вот смотри, неужели с qsort будет быстрее :))))

В самом неблагоприятном случае ОДИН проход одного массива. И все. В благоприятном - всего одно сравнение.
Вся фишка в том, что данные не добавляются несортированной пачкой, а по одной строке.


Option Explicit
Dim SA() As String  'массив строк (несортированный)
Dim PA() As Long    'массив индексов массива SA() (индексы в порядке возрастания строк)
Dim X As Long, i As Long
Private Sub Form_Load()
    X = 0
End Sub

Private Sub Комманда1_Click()
    ReDim Preserve SA(0 To X)   'добавляем строку в массив (в конце)
    SA(X) = Text1.Text
    ReDim Preserve PA(0 To X)   'добавляем в массив индексов индекс последнего
    PA(X) = X
    If X = 0 Then GoTo EndInsert  'первый элемент - ничего не вставляем
    i = X
    Do While StrComp(SA(X), SA(PA(i - 1)), vbTextCompare) < 0
        PA(i) = PA(i - 1)
        i = i - 1
        If i = 0 Then Exit Do
    Loop
EndInsert:
        PA(i) = X
        'проверяем, правильно вставлено или нет (должно выводить строки по алфавиту)
        Debug.Print "-----------"
        For i = 0 To X
            Debug.Print SA(PA(i))
        Next i
    X = X + 1
End Sub

Private Sub cmdBySort_Click()   'заполнение листа по алфавиту
    List1.Clear
    For i = 0 To UBound(PA())
        List1.AddItem SA(PA(i))
    Next i
    
End Sub

Private Sub cmdByOrder_Click()  'заполненние листа в порядке поступления данных
    List1.Clear
    For i = 0 To UBound(PA())
        List1.AddItem SA(i)
    Next i
End Sub

Ответить

Номер ответа: 18
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #18 Добавлено: 17.02.05 18:26
Для VladeD:
Забыл написать, что при нажатии кнопки Комманда1 строка добавляется из текстбокса Text1. Вся каша варится в цикле Do-Loop, остальное - вспомогательное типа проверок, заполнения листбокса и т.п.
Думаю разберешься.
Изначально предполагалось втыкать указатели на строки, затем подумал, что проще и быстрее будет с индексами элементов в строковом массиве. Тоже своего рода указатели, только не на память, а на массив SA()

Ответить

Номер ответа: 19
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #19
Добавлено: 17.02.05 19:35
Эх, как бы тебе объяснить по другому, что то, что ты делаешь, называется сортировка вставками, и она относится к тем видам сортировок, которые, в отличие от пузырьковой, быстрой, минимаксовой и т.п., требуют дополнительной памяти?

Ответить

Номер ответа: 20
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #20 Добавлено: 17.02.05 20:16
Я этих сортировок напробовался достаточно. Всяких. Знаю, что такое quicksort.Пробовал его и вдоль и поперек.
В задаче автора строки добавляются как я понял юзером, можно это представить так: Началась сортировка - прервалась до получения от юзера очередной строки - продолжилась - прервалась - снова продолжилась. Когда юзер закончит и пойдёт пить чай, закончится сортировка. Скорость ограничена скоростью набора текста на клавиатуре. Преимущества qsort я знаю, НО здесь они не работают. Потому что нет сразу всего объёма целиком.

А необходимость доп. памяти - это к чему? На что память? Кроме массива строк и массива указателей, на что ещё надо?

Ответить

Номер ответа: 21
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #21
Добавлено: 17.02.05 20:40
У тебя на входе данные сортированы? Нет. На выходе? Да. Абсолютно неважно, как данные вводятся - из файла, с клавиатуры, из памяти, абсолютно неважно, как они выводятся - в файл, в консоль или в листбокс, то, что посередине - называется алгоритм сортировки. Предложенный тобой - алгоритм сортировки вставками.

Ответить

Номер ответа: 22
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #22 Добавлено: 17.02.05 20:51
Ок, я же написал, что от начала и до конца работы программы - это сортировка. Состоит из отдельных шагов - вставок - инициируемых юзером.

А как ты предполагаешь использовать quicksort в данной задаче? И получить от него какие-либо преимущества. Набросай пару строк :)

Ответить

Номер ответа: 23
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #23
Добавлено: 18.02.05 07:32
Поскольку здесь имеется разделение ввода во времени, юзать алгоритмы с дополнительным использованием памяти лучше, чем без него, поэтому квиксорт отдыхает. И вообще я придрался не к тому, что ты используешь сортировку вставками, а к тому, что ты написал, что сортировка не нужна.

Ответить

Номер ответа: 24
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #24 Добавлено: 18.02.05 11:32
Sharp, ты злодей :) Прекрасно понимаешь, что да как, и цепляешься :)

Ответить

Номер ответа: 25
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #25
Добавлено: 18.02.05 13:53
Да, я такой. А еще у меня постов в 2 раза больше, чем у тебя :)))

Ответить

Номер ответа: 26
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #26 Добавлено: 18.02.05 14:01
Да, я тебя знаю, ты такой редиска.
А крестиком вышивать слабо?

Ответить

Номер ответа: 27
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #27
Добавлено: 18.02.05 14:34
Когда-то умел, но сейчас, боюсь, не вспомню.

Ответить

Номер ответа: 28
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #28
Добавлено: 19.02.05 12:28
Sharp, флэймер ты, вот ты кто :))

Ответить

Номер ответа: 29
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #29
Добавлено: 19.02.05 15:43
"Ну надо же как-то себя развлечь" ©

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам