|
本帖最后由 hwc2ycy 于 2013-1-16 15:56 编辑
一、冒泡法排序
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。- Sub 冒泡排序()
- Dim arr, temp, x, y, t, k
- t = Timer
- arr = Range("a1:a10")
- For x = 1 To UBound(arr) - 1
- For y = x + 1 To UBound(arr) '只和当前数字下面的数进行比较
- If arr(x, 1) > arr(y, 1) Then '如果它大于它下面某一个数字
- temp = arr(x, 1)
- arr(x, 1) = arr(y, 1)
- arr(y, 1) = temp
- End If
- Next y
- Next x
- Range("b3").Resize(x) = ""
- Range("b3").Resize(x) = arr
- MsgBox Timer - t
- End Sub
复制代码 二、选择排序法
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。- Sub 选择排序()
- Dim arr, temp, x, y, iMax, k, k1, k2
- arr = Range("a1:a10")
- For x = UBound(arr) To 1 + 1 Step -1
- iMax = 1 '最大的索引
- For y = 1 To x
- If arr(y, 1) > arr(iMax, 1) Then iMax = y
- Next y
- temp = arr(iMax, 1)
- arr(iMax, 1) = arr(x, 1)
- arr(x, 1) = temp
- Next x
- Range("c1").Resize(UBound(arr)) = arr
- End Sub
复制代码 关于排序算法的稳定性之说大家可以百度下。
这里就不贴地址了。
|
|