Shell排序列

时间:2016-10-14 09:16:44

标签: excel-vba shell sorting vba excel

我自己学习VB。我必须编写代码来对Shell A中的A列进行排序。 在排序第一个N / 2(N是要排序的单元格数)后,我坚持继续下一个间隙(下一个间隙只是间隙/ 2)。

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

我该怎么办?这个代码现在只比较了2个单元格,但我不知道它是如何依赖实际的差距的。

1 个答案:

答案 0 :(得分:0)

要继续下一个差距(第一个差距应该是N\2而不是N btw),我将你的循环包裹在

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

至于每个交错集合中的排序,您可能希望在for循环中将此集合提取为数组,并对该数组应用(单独实现的)插入排序。