Страницы: 1
RSS
Cортировка массива VBA
 
Доброго дня!

Есть код Quicksort для сортировки одномерного массива, взял с mdsn

Код
Sub QuickSort(arr, Lo As Long, Hi As Long)
  Dim varPivot As Variant
  Dim varTmp As Variant
  Dim tmpLow As Long
  Dim tmpHi As Long
  tmpLow = Lo
  tmpHi = Hi
  varPivot = arr((Lo + Hi) \ 2)
  Do While tmpLow <= tmpHi
    Do While arr(tmpLow) < varPivot And tmpLow < Hi
      tmpLow = tmpLow + 1
    Loop
    Do While varPivot < arr(tmpHi) And tmpHi > Lo
      tmpHi = tmpHi - 1
    Loop
    If tmpLow <= tmpHi Then
      varTmp = arr(tmpLow)
      arr(tmpLow) = arr(tmpHi)
      arr(tmpHi) = varTmp
      tmpLow = tmpLow + 1
      tmpHi = tmpHi - 1
    End If
  Loop
  If Lo < tmpHi Then QuickSort arr, Lo, tmpHi
  If tmpLow < Hi Then QuickSort arr, tmpLow, Hi
End Sub

Он предназначен для одномерного массива. У меня двухмерный массив, возможно ли модифицировать данный код, чтобы он сортировал так же по одному/первому столбцу, но изменял 2?
 
Это не обязательно. Достаточно сделать его сортирующим по индексам и возвращающим массив индексов первичного массива по сортируемому столбцу этого массива. А потом уже сборка итогового массива по индексам.
Да, и для двумерного массива при наличии в этом массиве дублей QuickSort не очень - поедет относительное смещение индексов соседних столбцов на дублях.

Что в исходном массиве?
Изменено: Anchoret - 15.02.2019 13:06:39
 
Вот пример, есть два столбца:

1 столбец - регион, значения могут повторяться
2 столбец - имя

Мне необходимо добиться того чтобы список был отсортирован по первому столбцу, т.е. чтобы имена из одного региона шли друг за другом. Оригинальный список может быть от 1500 строк.
 
Докрутил я немного Quicksort, работает(сортирует массив из двух столбцов, по первому), на счет скорости мне пока непонятно, проверю как получу большие исходные данные.  
Изменено: ALFA - 15.02.2019 18:15:27
 
Писал как то под определенную задачу класс с сортировкой одно и многомерных массивов, посмотрите может подойдет.
"Все гениальное просто, а все простое гениально!!!"
 
ALFA, для 1500-5000 строк особой разницы и не почуствуете)
Вариант с числовым сортером, хотя для него сфера применения массивы от 100к строк (как впрочем и для QuickSort'a):
Скрытый текст
Изменено: Anchoret - 15.02.2019 19:59:09
 
Привет!
Цитата
ALFA написал:
проверю как получу большие исходные данные.  
Всем тем, кто не написал себе макрос размножения данных.
Сравнение прайсов, таблиц - без настроек
Страницы: 1
Наверх