冒泡法排序c语言程序_Excel VBA:对数组进行排序之冒泡排序法!

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

学到很多东西的诀窍 ,就是一下子不好学很多东西。——洛克 今日分享

VBA程序中,数组是很重要的一部分,经常会用到。有时我们需要对数组中的元素进行排序,但是Excel中并没有提供一种现成的方法对数组进行排序,如果不考虑运行速度的话,我们完全可以采用一种变通的方法,把数组导出到Excel表中,利用内置命令排好序后再读取到数组中去。

如下:

4856ecfccd7721ff6c22ad7b27dec6ca.gif

代码如下:

'1、利用工作表内置的排序命令Sub test1()    Dim arr    arr = Range("a1:a25")    Range("b1:b25") = arr    Range("b1:b25").Sort Cells(1, 2), xlAscending    arr = Range("b1:b25")'    Range("b1:b25").ClearContentsEnd Sub
代码很简单,用的是Range对象的Sort方法。 但是如果对速度有要求的话,通常最好是编写一段排序的程序。 实现排序的方法有:冒泡排序法、快速排序法、计数排序法。 今天我们介绍下冒泡排序法。 先来看下冒泡排序法的原理: 比如有一组数据: 5,3,2,4,1,要按升序排列成1,2,3,4,5。 通过两两比较大小的方法决定是否要交换位置,最终得出正确的顺序。 如下: d414c8f5a47962c13923d6db6bbc97c1.png 首先第一个位置和第二个位置上的数字比较,5>3,所以两个数字要交换位置,然后比较第二个位置和第三个位置上的数字,5>2,交换位置,接着比较第三个位置和第四个位置上的数字,5>4,交换位置,再接着比较第四个位置和第五个位置上的数字,5>1,交换位置。这样,第一轮比赛就完成了,数组中最大的一位数字就排到数组中最后一位了。 接着进行第二轮比较,还是从数组中第一位开始,第一位数字和第二位数字比较,第二位和第三位数字比较,……,因为第一轮结束后,最大的一位数字已经移动到最后了,所以依次比较只需要进行到第三位和第四位,也就是位置一和位置二比较,位置二和位置三比较,位置三和位置四比较。 第二轮结束后,第二位最大值也归位了。 接着进行第三轮…… 每进行一轮,该轮内部的比较次数便少一次。 每轮比较后情况如下: 84f5db69357c37aa5654847355e27f35.png A列为原来的数据列,经过4轮比较后得出正确的序列,每一轮中比较次数依次是4,3,2,1,所以完成该排序经过了4+3+2+1=10次数字的两两比较。 如果把这些数字比作水泡的话,经过比较,大的数字就逐渐冒到序列的尾部了,故叫做冒泡排序法。 代码如下:
Sub test2()    Dim arr, i%, j%, temp%    arr = Range("a1:a5")    For i = 1 To 4 '一共要比较4轮(N-1)        For j = 1 To 5 - i '每一轮需要比较的次数            If arr(j, 1) > arr(j + 1, 1) Then                temp = arr(j, 1)                arr(j, 1) = arr(j + 1, 1)                arr(j + 1, 1) = temp            End If        Next j    Next iEnd Sub
以上便是冒泡排序法的原理。 思考: 比如:5,2,1,3,4,这一组数据,经过第一轮比较后, 排列成:2,1,3,4,5,其实3,4,5已经是按顺序排列了,第二轮排序还需要三次两两比较吗?该怎么优化代码?我们下节继续。

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

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

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

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

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

4、公众号中4个目录中的文章对应的素材可以免费获得

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

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

点击,发现惊喜哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值