冒泡排序的效率问题!运算速度超慢!分已用完.对不起各位了.

zhuhuofong 2007-12-17 11:43:33
Dim b(50000) As Single
Private Sub Command1_Click()
For i = o To UBound(b) - 1
For ii = o To 5000 '开始冒泡
If b(ii) < b(ii + 1) Then
jh = b(ii + 1)
b(ii + 1) = b(ii)
b(ii) = jh
End If
Next
Next
'冒泡结束
For i = 0 To UBound(b) - 1 '排序结果
List2.AddItem b(i)
Next
End Sub
Private Sub Form_Load() '产生随机数.
Randomize
For i = o To UBound(b) - 1
b(i) = Int(Rnd * 50001)
List1.AddItem b(i)
Next
End Sub
这段程序对50000个数据进行排序,大概要60秒左右.也太慢了吧,有没有更好办法.谢谢了.
...全文
349 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shakoe 2007-12-19
  • 打赏
  • 举报
回复
List2.AddItem b(i)
List1.AddItem b(i)

把这2行代码先注释去掉你会发现速度很很快了

对list,edit等控件添加的文本超过一定数量就会慢下来了可能是vb的bug
vbman2003 2007-12-18
  • 打赏
  • 举报
回复
恩,我忽略了一个细节,就是field的数据类型,当使用varchar类型的时候,对数字的排序可能是不正确的,你可以将其修改为数字类型,比如int,double或者decimal
zhuhuofong 2007-12-18
  • 打赏
  • 举报
回复
谢谢老马和VBMAN2003了,
我写这段代码就为测试冒泡效率的.
别的算法我不会,只会冒泡.
我调用你上面的程序,怎么排序混乱呢?
Private Sub Command2_Click()
RecordsetSort (b)
For i = LBound(b) To UBound(b)
List2.AddItem b(i)
Next
End Sub
这个怎样调用啊!怎样得到排序结果啊!
vbman2003 2007-12-18
  • 打赏
  • 举报
回复
如果你是整数排序,快速排序和递归,效率都非常好,冒泡从算法角度看可能是比较经典的(我没学过算法,只是猜想),但实践下来冒泡的效率并不高。
利用对象和控件实现排序,适用性比较好,而且代码简单易懂,我觉得从解决问题角度看,是个很实在的方法,呵呵
zhuhuofong 2007-12-17
  • 打赏
  • 举报
回复
哦!可能这段代码有大量时间是消耗在载入list1和list2上.
anticlimax 2007-12-17
  • 打赏
  • 举报
回复
楼主下面的代码是不是把用来计算载入list2的时间,
载入list2的时间耗费也很多的
嗷嗷叫的老马 2007-12-17
  • 打赏
  • 举报
回复
还顶....
zzyong00 2007-12-17
  • 打赏
  • 举报
回复
再顶
嗷嗷叫的老马 2007-12-17
  • 打赏
  • 举报
回复
顶下..........
vbman2003 2007-12-17
  • 打赏
  • 举报
回复
给你个投机取巧的方法(不是算法^_^),效率比你这个冒泡好许多:



'记录集法(字符,数字通用)
Sub RecordsetSort(anyInput As Variant, Optional Sort As String = "ASC")

Dim rs As New Recordset
Dim i As Long

With rs
.Fields.Append "FSort", adVarChar, 50
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Open
For i = LBound(anyInput) To UBound(anyInput)
.AddNew
!FSort = anyInput(i)
.Update
Next
'.UpdateBatch
.Sort = "FSort " & Sort
For i = LBound(anyInput) To UBound(anyInput)
anyInput(i) = !FSort
.MoveNext
Next
End With
Set rs = Nothing

End Sub



7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧