本来想把多重桶排序部分(即二维数组)介绍完的。但由于代码未调试好,所以还是先介绍简单排序法,后面有时间再补上了。 其实,昨天盗梦已经提到了简单排序了。简单排序算法其实很简单。——当然了,不简单就不叫“简单排序”了。^_^ - 初始化,找出最小值,放在最左边。
- 反复执行3、4。
- 在剩余的数据中,找出最小值。
- 紧邻在前一个最小值的右边。
接下来,我们来分解一下,第一步,用前面学过的基础算法就可以直接求出来了。——写一个循环就可以把第一个最小值拿出来了。 第二步显然是个内循环。由于“剩余”两个字,显然初始值应该是个变量。,应该也不难。 难度在第三步。拿剩下的数据跟之前提出的值比较,就涉及到两个数组的比较了。我们知道,数组中有个Filter方法。 (额,不知道的继续看这部分)通过对已知数组去筛选已知元素的方法来产生一个数组。如果已知数组包含已知元素,就会把元素保存到一个新数组中,否则元素为空,新数组自然是一个空集合了。——空集数组的上限自然是-1了。——根据这个性质,我们就可以轻而易举地完成了最小值与剩余元素的比较了。 最后一步,显然可以考虑用一个数组来安放取出来的元素(当然也可以只用一个数组,只是值的交换上要多写一句)。再回头看看第三步,我想,大家应该有些头绪了吧: - Sub simSort()
- Dim arr()
- Dim arr2()
- Dim i As Long
- Dim j As Long
- Dim k As Long
- k = 1000
- arr = Array(123, 602, 82, 777, 57, 510, 396, 196, 843, 138)
- '忽略错误
- On Error Resume Next
- For i = 0 To UBound(arr)
- For j = i To UBound(arr)
- '找出最小值
- If arr(j) < k Then
- '和arr2比较,如果arr2中没有该元素
- If UBound(VBA.Filter(arr2, arr(j))) = -1 Then
- k = arr(j)
- End If
- End If
- Next</span>
- '修改arr2的元素空间,加上Preserve以保留已取出的最小值。并把数据赋予arr2,最后初始化k变量,以便取下一个最小值。
- ReDim Preserve arr2(0 To i)
- arr2(i) = k
- k = 1000
- Next
- End Sub
复制代码 【新手入门】之一:If分支语句
【新手入门】之二:分支语句总结
【新手入门】之三:循环语句For
【新手入门】之四:循环语句Do和死循环
【新手入门】之五:公共变量与传址过程、传值过程
【新手入门】之六:“悲欢离合总无情”——浅谈Split和Join
【新手入门】之七:嵌套与并列——再谈If流程问题
【新手入门】之八:“连就连”——浅谈“&”和“+”连接符的区别
【新手入门】之九:从百钱百鸡谈起——浅谈“规划求解”兼答lingjiang问
【新手入门】之十:书到用时方恨少——自定义菜单(Access 2003)的制作
【新手入门】之十一:浅谈ADO之序言
【新手入门】之十二:浅谈ADO之Connection
【新手入门】之十三:浅谈ADO之Conmmand(上)
【新手入门】之十四:浅谈ADO之Command(下)
【新手入门】之十五:浅谈ADO之Recordset(上)
【新手入门】之十六:浅谈ADO之Recordset(下)
【新手入门】之十七:浅谈列表框的使用
【新手入门】之十八:双击列表框修改数据
【新手入门】之十九:从“书与女友恕不外借”谈起——浅谈“Bookmark”的使用
【新手入门】之二十:“书与书签”——bookmark属性答疑
【新手入门】之二十一:记录集的“凌迟”——逐条导出记录集
【新手进阶】之一:基础算法(一)
【新手进阶】之二:基础算法(二)
【新手进阶】之三:基础算法(三)
【新手进阶】之四:基础算法(四)
【新手进阶】之五:排序搜索(一)
【新手进阶】之六:排序搜索(二)
【新手进阶】之七:递归算法
【新手进阶】之八:冒泡排序
【新手进阶】之九:浅谈不绑定数据源操作记录
【新手进阶】之十:工作日的计算
【新手进阶】之十一:“庖丁解牛”和“纪昌学射”——浅谈表格式文本数据的导入
【新手进阶】之十二:从四脚腾空的奔马谈起——原来界面可以这样设计
【新手进阶】之十三:Outlook风格导航界面
【新手进阶】之十四:仓库管理系统
|