设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3781|回复: 5
打印 上一主题 下一主题

[模块/函数] 【新手进阶】之六:排序搜索(二)

[复制链接]
跳转到指定楼层
1#
发表于 2015-1-27 09:56:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

本来想把多重桶排序部分(即二维数组)介绍完的。但由于代码未调试好,所以还是先介绍简单排序法,后面有时间再补上了。

其实,昨天盗梦已经提到了简单排序了。简单排序算法其实很简单。——当然了,不简单就不叫“简单排序”了。^_^

  • 初始化,找出最小值,放在最左边。
  • 反复执行3、4。
  • 在剩余的数据中,找出最小值。
  • 紧邻在前一个最小值的右边。

接下来,我们来分解一下,第一步,用前面学过的基础算法就可以直接求出来了。——写一个循环就可以把第一个最小值拿出来了。

第二步显然是个内循环。由于“剩余”两个字,显然初始值应该是个变量。,应该也不难。

难度在第三步。拿剩下的数据跟之前提出的值比较,就涉及到两个数组的比较了。我们知道,数组中有个Filter方法。

(额,不知道的继续看这部分)通过对已知数组去筛选已知元素的方法来产生一个数组。如果已知数组包含已知元素,就会把元素保存到一个新数组中,否则元素为空,新数组自然是一个空集合了。——空集数组的上限自然是-1了。——根据这个性质,我们就可以轻而易举地完成了最小值与剩余元素的比较了。

最后一步,显然可以考虑用一个数组来安放取出来的元素(当然也可以只用一个数组,只是值的交换上要多写一句)。再回头看看第三步,我想,大家应该有些头绪了吧:

  1. Sub simSort()
  2.   Dim arr()
  3.   Dim arr2()
  4.   Dim i As Long
  5.   Dim j As Long
  6.   Dim k As Long
  7.   k = 1000
  8.   arr = Array(123, 602, 82, 777, 57, 510, 396, 196, 843, 138)
  9.   '忽略错误
  10.   On Error Resume Next
  11.   For i = 0 To UBound(arr)
  12.       For j = i To UBound(arr)
  13.   '找出最小值
  14.           If arr(j) < k Then
  15.   '和arr2比较,如果arr2中没有该元素
  16.                If UBound(VBA.Filter(arr2, arr(j))) = -1 Then
  17.                    k = arr(j)
  18.               End If
  19.           End If
  20.       Next</span>
  21. '修改arr2的元素空间,加上Preserve以保留已取出的最小值。并把数据赋予arr2,最后初始化k变量,以便取下一个最小值。
  22. ReDim Preserve arr2(0 To i)
  23.       arr2(i) = k
  24.       k = 1000
  25.   Next
  26.   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风格导航界面
【新手进阶】之十四:仓库管理系统

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅

点击这里给我发消息

2#
发表于 2015-1-27 10:39:16 | 只看该作者
roych 多才多艺,还写小品?
3#
 楼主| 发表于 2015-1-27 10:49:55 | 只看该作者
tmtony 发表于 2015-1-27 10:39
roych 多才多艺,还写小品?

没办法啊,蜀中无大将,廖化作先锋。
4#
发表于 2015-1-27 16:42:17 | 只看该作者
roych 发表于 2015-1-27 10:49
没办法啊,蜀中无大将,廖化作先锋。

诸葛出马一个顶一沓!

点击这里给我发消息

5#
发表于 2015-11-11 18:05:36 | 只看该作者
经典啊
回复

使用道具 举报

点击这里给我发消息

6#
发表于 2015-11-11 18:07:08 | 只看该作者
高产啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 04:44 , Processed in 0.109832 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表