Сортировка выбором
Автор: Александр Хохлов   
06.02.2011 12:27

Реализация сортировки выбором.

Постановка задачи.

Имеется исходный диапазон - столбец A. Требуется осуществить его сортировку выбором по возрастанию и результат записать в столбец B.

Действие 1. Алгоритм сортировки выбором.

Public Function SortSelectionArray(A As Variant) As Variant
  Dim n, i, j, Min_i As Byte
  Dim temp As Variant
  n = UBound(A, 1)
    For i = 1 To n - 1
       'предположение, что минимальным является
       'первый элемент обрабатываемой последовательности
       Min_i = i
       For j = i + 1 To n
          'если найден элемент меньше
          'Min_i получит новое значение
          If A(j) < A(Min_i) Then Min_i = j
       Next
       'перестановка только в случае,
       'если элемент меньше был обнаружен
       If Min_i <> i Then
        temp = A(i)
        A(i) = A(Min_i)
        A(Min_i) = temp
       End If
    Next
  SortSelectionArray = A
End Function

Действие 2. Проверка работоспособности.

Воспользуемся уже готовой функцией Случайная сортировка диапазона быстро работы с диапазонами и заполним исходный массив значениями с листа через нее.

Public Function SortSelectionRange(fromRange, toRange As Range)
  Dim A As Variant
  Dim Ub As Byte
  Ub = fromRange.Rows.Count
  ReDim A(1 To Ub) As Variant
  For i = 1 To Ub
    A(i) = fromRange.Rows(i)
  Next i
  B = SortSelectionArray(A)
  For i = 1 To Ub
   toRange.Rows(i) = B(i)
  Next i
End Function

Дальше вызов с указанием исходного-конечного диапазонов.

Public Sub ПроверкаРаботы()
  Application.ScreenUpdating = False
  SortSelectionRange [a1:a10], [b1:b10]
End Sub

 

Добавить комментарий

Защитный код
Обновить