谁能把我的描述用VBA表达出来?(插入排序法)!

Posted 米宏Office

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁能把我的描述用VBA表达出来?(插入排序法)!相关的知识,希望对你有一定的参考价值。

我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!


有些同学问我,学习这些排序法有什么用呢?


我们就是使用个Office办公软件而已,学习VBA的目的也是为了能够更加快捷、更加智能的使用Office办公软件,貌似这些排序算法与我们一点边都不沾。


大部分情况下,确实很少用到这些,不过拿这些排序算法来提升使用VBA的技能和逻辑思维倒是真的很有意思。


比如下面的案例:



需要对9、1、6、2、5、7、4、3、10、8这组数据进行排序。


思路如下:

arr为待排序的数组,声明一个新的数组arr1用来存放排序后的结果。

首先在arr中取出第一个元素9,放到arr1中第一个位置,接着在arr中取出第二个元素1,然后与arr1中的9比较,比9小,所以放在9前面,于是arr1中的元素依次变为1,9。 这样做以后,arr1中的元素就会按照从小到大的顺序排列。

接着拿出arr中的6与arr1中的9比较,小于9,依次往前比较,和1比较,大于1,证明6应该放在1和9中间,所以arr1就变为了1,6,9。

接着拿出2,在arr1中从后向前寻找,找到2大于1,证明2应该插在1后面,这样arr1就变为了1,2,6,9。

如此重复下去,是不是得到的新数组就是排好序的呢?


上面就是 插入法排序 的原理,你能把它用VBA代码写出来吗?


用到的VBA知识点很少,关键是逻辑思维很重要,知道在哪一步该做什么很重要。


代码如下:
Sub Insertion_Sort()Dim arr, arr1(), c&, i&, j&arr = Array(9, 1, 6, 2, 5, 7, 4, 3, 10, 8)c = UBound(arr)
'声明一个新数组用来装排序后的元素ReDim arr1(0 To c)'遍历待排序数组中的元素For i = 0 To c '先把第一个元素写入arr1中 If i = 0 Then arr1(0) = arr(0) '如果遍历出来的元素比新数组中第i-1位的元素值大,则该元素应该排在第i位。 ElseIf arr(i) >= arr1(i - 1) Then arr1(i) = arr(i) '否则在新数组中从第i-1位向前扫描,直到找到比其小的值,证明该元素应该插在该值后 Else For j = i - 1 To 0 Step -1 If arr(i) < arr1(j) Then arr1(j + 1) = arr1(j) arr1(j) = arr(i) End If Next j End IfNext i
End Sub


我是教学Office技能的,如果你愿意为了提升自己的技能而花299元(终身会员)的话请加我微信:527240310,只要你愿意学习,我将不负所望,把我所学全部奉贤给你!否则请尊重我的时间,谢谢配合!

本节的分享就到这里,祝大家每天都有进步。

成为米宏office学堂终身会员有啥好处:

1、米宏云课堂的视频永久免费观看

2、日后录制的视频可以免费观看

3、视频中不懂的可以提问

5、可以帮助解决视频中未提到,文章中未写到的典型问题

期待真心想提高office水平的朋友,非诚勿扰!

点击“阅读原文”,发现惊喜哦!

以上是关于谁能把我的描述用VBA表达出来?(插入排序法)!的主要内容,如果未能解决你的问题,请参考以下文章

谁能把别人加密过的T5557卡进行解密并复制出来?

有意思的快速排序法(VBA版本)!

挑战下你的VBA水平(希尔排序法)!

单片机C语言编程代码优化

我如何用 Ruby/Python 编写这个?或者,你能把我的 LINQ 翻译成 Ruby/Python 吗?

测试用例设计方法之判定表