|
![](https://clubstatic.excelhome.net/image/common/ico_lz.png)
楼主 |
发表于 2014-8-12 11:10
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 香川群子 于 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
复制代码 |
评分
-
2
查看全部评分
-
|