MyTetra Share
Делитесь знаниями!
Сортировка массива через листбокс
30.12.2017
20:42
Текстовые метки: Сортировка,vba,sort,SortArray
Раздел: VBA - Сортировка

Эх чуток опоздали. Совсем недавно сидел за испытаниями скоростей сортирования. Многомерный массив, где нужно упорядочить список файлов (~100 000) и паралельно со списками дат (создания, изменения, обращения), размеров, контрольных сумм, и первых строк файла. Пузырьковая сортировка давала больше 10 секунд, а выборочная дала около секунды.
А вообще такие штучки ,как выбор метода, очень важны. Например если сравниваешь 2 маленьких файла, то алгоритм нужен тот, который быстрее напишешь. А если 2 файла огромные, и нужно создать отчет чего нет в одном файле и чего нет в другом, то метод простого построчного сравния даст результат через... несколько минут, в то время, как более сложный - с исключением уже ненужного и уменьшением востребованного в массиве... результат получаешь в течении секунды.
Вот и выбирай - быстро написать алгоритм, или писать долго но быстро получить ответ. Как еще один пример - получить таблицу простых чисел 1 до 100 (результат будет получен "сразу" человек и не заметит), а вот от 1 до 10 миллионов - в зависимости от выбора алгоритма, скорость будет отличаться в десятки тысяч раз, которые решат - ждать "минуту", или "неделю"

Хотя лично я пользуюсь для малых массивов листбоксом (у него ,правда, ограничено количество строк, но... ) В свойствах контрола ставлю Sorted = True, заполняю его массивом "прошу отсортировать" и считываю с него упорядоченный массив:

Код (vb.net):


Dim i As Integer
Dim a(100) As String
'a(0)=... , a(1)=... , ... , a(100)=... .

List1.Sorted = True ' ! автосортировку можно установить ТОЛЬКО в свойствах контрола
List1.Visible = False ' если невидимый, то работает намного быстрее (можно установить в свойствах)

'(РАБОТА
List1.Clear ' чистим после предыдущего раза

For i = 0 To 100 ' обязательно с ноля, ведь с ноля начинается номерация строк
List1.AddItem (a(i))
Next i

List1.Refresh ' обновляем = даем отсортироваться
DoEvents

For i = 0 To 100
a(i) = List1.List(i)
Next i
'РАБОТА)
 

 

Последнее редактирование модератором: 14 сен 2015

 
MyTetra Share v.0.52
Яндекс индекс цитирования