本帖最后由 香川群子 于 2014-8-12 11:15 编辑
然后,下面就是完整的一个希尔排序算法代码例子
(其实同样的希尔排序算法代码,不同的人写法也不同,但基本循环结构、算法是一样的)
- Sub ShellSortTest() '调用希尔排序的代码测试实例
- arr = Array(5, 4, 2, 1, 5, 8, 7, 2, 7, 9, 3, 6)
- Call ShellSort5(arr)
- Stop
- End Sub
- Sub ShellSort5(arr, Optional n& = 5) '简化希尔排序过程 序列参数可取 n=7,5,4 但我觉得=5较好
- Dim h&, i&, j&, k&, L&, U&, t
- L = LBound(arr): U = UBound(arr): h = U - L + 1
- Do
- h = (h \ n) * 2 + 1 '按此简化希尔序列计算方法,计算每次的步长h直至h=1
- Call InsertSort1(arr, L, U, h) '根据计算得到的步长h,调用插入排序算法函数过程代码
- Loop Until h = 1
- End Sub
- Sub InsertSort1(trr, L&, U&, Optional h& = 1) '一维数组按步长h进行插入排序
- Dim i&, j&, t
- For i = L + h To U
- t = trr(i)
- For j = i - h To L Step -h
- If trr(j) < t Then Exit For
- trr(j + h) = trr(j)
- Next
- trr(j + h) = t
- Next
- End Sub
复制代码 |