Столбец сортировки оболочки

#excel #shell #sorting #vba

#excel #оболочка #сортировка #vba

Вопрос:

Я сам изучаю VB. Я должен написать код для сортировки столбца A: A в методе оболочки. Я застрял на переходе к следующему пробелу (следующий пробел — это просто пробел / 2) после сортировки для первых N / 2 (N — количество ячеек для сортировки).

 Sub Shellsort()

Dim gap As Long
Dim i As Long
Dim Obad As Range
Dim N As Long
Dim temp As Long

N = Application.WorksheetFunction.CountA(Sheets(1).Range("A:A"))

gap = N


    For i = 1 To gap

        If Cells(i, 1).Value < Cells(i   gap, 1).Value Then

            temp = Cells(i, 1).Value
            Cells(i, 1).Value = Cells(i   gap, 1).Value
            Cells(i   gap, 1).Value = temp

        End If

    Next i


End Sub
 

Как мне продолжить? Этот код ofc теперь сравнивает только 2 ячейки, но я понятия не имею, как заставить его зависеть от фактического разрыва.

Ответ №1:

Чтобы перейти к следующему пробелу (и первый пробел, вероятно, должен быть N2 , а не N btw), я бы обернул ваш цикл в

 Do While gap > 0
    For i = 1 To gap
        'code
    Next i
    gap = gap  2
Loop
 

Что касается сортировки внутри каждого чередующегося набора, вы, вероятно, захотите извлечь этот набор в виде массива в цикле for и применить (отдельно реализованную) сортировку вставки к этому массиву.