我自己学习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个单元格,但我不知道它是如何依赖实际的差距的。
答案 0 :(得分:0)
要继续下一个差距(第一个差距应该是N\2
而不是N
btw),我将你的循环包裹在
Do While gap > 0
For i = 1 To gap
'code
Next i
gap = gap \ 2
Loop
至于每个交错集合中的排序,您可能希望在for循环中将此集合提取为数组,并对该数组应用(单独实现的)插入排序。