ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3767|回复: 12

無聊.用vba寫的算法代碼.供新學參考

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-3-24 09:13 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:排序
'------------------------
'插入排序的算法
'------------------------
Function InsertSort(ByRef n As Variant) As Boolean
        Dim j As Integer
        Dim p As Integer, temp%
        
        For p = 0 To UBound(n)
                temp = n(p)
                j = p
                Do While j > 0
                        If n(j - 1) > temp Then
                                n(j) = n(j - 1)
                        Else
                                Exit Do
                        End If
                        j = j - 1
                Loop
                n(j) = temp
        Next
        InsertSort = True
End Function

'冒泡排序

Public Function BobleSort(ByRef n As Variant) As Boolean
        Dim i As Integer, j As Integer
        Dim Swaped As Boolean
        
        For i = 0 To UBound(n) - 1
                For j = UBound(n) To i + 1 Step -1
                           If n(i) < n(j) Then
                                Swap n, j, i
                           End If
                Next
        Next
End Function

Public Function Swap(ByRef n As Variant, ByVal i As Integer, ByVal j As Integer)
        Dim temp%
        temp = n(i)
        n(i) = n(j)
        n(j) = temp
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-3-24 09:36 | 显示全部楼层
这个非常重要.老师可否帮我写个先进先出的算法.谢谢!

TA的精华主题

TA的得分主题

发表于 2012-3-24 09:47 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师,给新手学习,能不能加点注释?实在看不懂{:soso_e149:}

TA的精华主题

TA的得分主题

发表于 2012-3-24 10:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Function InsertSort(ByRef n As Variant) As Boolean '带入一组要排序的数字数组
        Dim j As Integer '定义一个整型变量
        Dim p As Integer, temp% '定P为整型变量, temp为整型变量
        
        For p = 0 To UBound(n)  '从要排序的数组的第一位置到最后一位
                temp = n(p) '将第几位的数字抽取出来赋值给临时的temp变量
                j = p '将位置号赋值变量j
                Do While j > 0 '开始循环,条件是j必须大于0
                        If n(j - 1) > temp Then '条件判断,和前一位的数字比大小.这里好像会有问题,就是第一位的下标是0,0-1=-1了,溢出数组n了.是否需要为0位单独写一句.?
                                n(j) = n(j - 1) '如果前一位比本位的大.换个顺序
                        Else
                                Exit Do '不成立的话比下一位的
                        End If
                        j = j - 1 '变量j自减,继续和前一位的相比
                Loop
                n(j) = temp '把temp值返回
        Next
        InsertSort = True '排序完成
End Function

TA的精华主题

TA的得分主题

发表于 2012-3-24 10:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Function InsertSort(ByRef n As Variant) As Boolean
  2.         Dim j As Integer, p As Integer, temp%
  3.         For p = 0 To UBound(n)
  4.                 temp = n(p)
  5.                 j = p
  6.                 Do While j > 0
  7.                         If n(j - 1) <= temp Then Exit Do
  8.                         n(j) = n(j - 1)
  9.                         j = j - 1
  10.                 Loop
  11.                 n(j) = temp
  12.         Next
  13.         InsertSort = True
  14. End Function
复制代码
'会不会慢一点呢?

TA的精华主题

TA的得分主题

发表于 2012-3-24 10:53 | 显示全部楼层
J是第一次是等0的,0-1=-1,数组的下标除非重新定义,默认都是0开始的,是否需要单独对第一位的作设置!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-24 15:46 | 显示全部楼层
jygzcj 发表于 2012-3-24 09:36
这个非常重要.老师可否帮我写个先进先出的算法.谢谢!

先進先出是用隊列來實現的.
您可以參考數據結構中的 隊列 來實現其代友碼

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-24 15:48 | 显示全部楼层
jygzcj 发表于 2012-3-24 10:53
J是第一次是等0的,0-1=-1,数组的下标除非重新定义,默认都是0开始的,是否需要单独对第一位的作设置!

當第一次j=0時.是不會進行  while j>0 .. end while循環的.

TA的精华主题

TA的得分主题

发表于 2012-3-24 15:48 | 显示全部楼层
gongzl1981 发表于 2012-3-24 15:46
先進先出是用隊列來實現的.
您可以參考數據結構中的 隊列 來實現其代友碼

可否再祥细说一下!

TA的精华主题

TA的得分主题

发表于 2012-3-24 15:50 | 显示全部楼层
gongzl1981 发表于 2012-3-24 15:48
當第一次j=0時.是不會進行  while j>0 .. end while循環的.

明白了.真是高!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-27 11:19 , Processed in 0.056298 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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