挑战下你的VBA水平(希尔排序法)!
Posted 米宏Office
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战下你的VBA水平(希尔排序法)!相关的知识,希望对你有一定的参考价值。
我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
我现在越来越觉得学习VBA难点在于解决问题的思路,而非无穷无尽的陌生的对象。
大家都知道,学习VBA其实就是学习一个个的对象,学习这些对象的属性及方法,比如Range、Workbook、Worksheet等等对象。大部分情况下,只要熟悉这些对象和VBA的基本语句结构,比如循环、判断、选择等,就可以解决很多问题。
只要掌握了基本规律,这些学起来都比较容易,可以即用即学。学的越多,学起来就越容易,因为很多对象的属性、方法都具有相似性。
但是解决问题时的思路却不是那么容易学习到的,需要一定的训练,比如简单的循环、判断语句,
什么时候循环呢?
什么时候停止循环呢?
什么时候判断呢?
判断的时候分几种情况呢?
每一种情况下是否又有其它情况呢?
情况比较复杂时,很多同学就会出现看似基本的语句结构却怎么也理不清楚的情况?
这也就是最近我为啥总写排序算法的原因,对于锻炼思维一定是非常好的练习题目。网上用其它语言写排序算法的比较多,用VBA写的很少。
今天分享下希尔排序法,读懂原理后大家可以试着动手写写代码。建议先把插入排序法搞懂,再来学习希尔排序法。
《》
先来看下基本概念:
希尔排序法其实是插入排序法的升级版,是将整个无序列分割成若干小的子序列分别进行插入排序的方法,所以也叫做缩小增量法排序法。
具体怎么做的呢?
举个例子:
Sub Shell_Sort()
Dim arr, arr1()
Dim l&, r&, gap&, i&, j&
arr = Array(53, 19, 15, 10, 16, 8, 7, 18, 1, 56)
l = LBound(arr)
r = UBound(arr)
gap = r + 1
Do
ReDim arr1(l To r)
gap = Int(gap / 2) '间隔
'把每一组的第一个元素装入新数组中
For i = l To gap - 1
arr(i) =
Next
'遍历元素的元素(每一组第一个元素除外)
For i = gap To r
'在arr1中从i-gap位置向前扫描找到位置并插入
For j = i - gap To l Step -gap
If arr(i) < arr1(j) Then
+ gap) = arr1(j)
Else
+ gap) = arr(i)
Exit For
End If
arr(i) =
Next j
Next i
'把arr1赋给arr,继续循环
arr = arr1
Erase arr1
1 '直到间隔为1时退出循环 =
End Sub
成为米宏office学堂终身会员有啥好处:
1、米宏云课堂的视频永久免费观看
2、日后录制的视频可以免费观看
3、视频中不懂的可以提问
5、可以帮助解决视频中未提到,文章中未写到的典型问题
点击“阅读原文”,发现惊喜哦!
以上是关于挑战下你的VBA水平(希尔排序法)!的主要内容,如果未能解决你的问题,请参考以下文章