注册 登录
编程论坛 VB6论坛

VB做冒泡排序,数度好慢,怎么样优化可以提高速度?谢谢

huangjunxing 发布于 2017-10-08 22:22, 3259 次点击
VB做冒泡排序,数度好慢,怎么样优化可以提高速度?谢谢
Dim i, j As Integer
Dim t As Single
For i = 1 To 30000 - 1
For j = i + 1 To 30000
If paix(i) > paix(j) Then
t = paix(i)
paix(i) = paix(j)
paix(j) = t
End If
Next j
Next i
3 回复
#2
xiangyue05102017-10-09 09:19
http://tieba.baidu.com/p/3995235839
你可以看看这个。具体不太清楚。
#3
ZHRXJR2017-10-09 14:07
你的这个30000数组 用 冒泡排序法、插入排序法、Shell排序法测试了一下,冒泡排序法耗时11秒,插入排序法耗时35秒,Shell排序法耗时22秒,其他没有测试,看来还是 冒泡排序法 比较快。
我的系统是 W7 CPU I7。

[此贴子已经被作者于2017-10-9 14:09编辑过]

#4
xzlxzlxzl2017-10-10 04:02
用选择法排序,可减少交换次数,速度可提高一倍。
我记得冒泡法排序是相邻的两个数比较,逐步交换,最终将最小的数(针对从小到大排序而言)从下面冒上来的。题主的排序是每次扫描到最小的数和当前顶层数据交换,这其实是选择法排序的一种变种,不是冒泡。
两种代码如下:
程序代码:
Private Sub Command2_Click()
  '选择法排序
  Dim t As Long, i As Integer, j As Integer, t1 As Single, paixu(30000) As Single
  For i = 0 To 30000
    paixu(i) = px(i)
  Next
  t = timeGetTime
  For i = 0 To 29999
    k = i
    For j = i + 1 To 30000
      If paixu(k) > paixu(j) Then k = j
    Next
    If k <> i Then
      t1 = paixu(i)           '每次选择最小的数和当前顶层的数交换
      paixu(i) = paixu(k)
      paixu(k) = t1
    End If
  Next
  MsgBox timeGetTime - t
End Sub

Private Sub Command3_Click()
  '冒泡法排序
  Dim t As Long, i As Integer, j As Integer, t1 As Single, paixu(30000) As Single
  For i = 0 To 30000
    paixu(i) = px(i)
  Next
  t = timeGetTime
  For i = 0 To 29999
    For j = 30000 To i + 1 Step -1
      If paixu(j - 1) > paixu(j) Then
        t1 = paixu(j - 1)                '每次相邻的两个数比较,逐步将最小的数交换到前面
        paixu(j - 1) = paixu(j)
        paixu(j) = t1
      End If
    Next
  Next
  MsgBox timeGetTime - t
End Sub
1