应用思考-教育技术论坛

标题: VB排序算法 [打印本页]

作者: etthink    时间: 2021-12-7 00:37
标题: VB排序算法
                        冒泡排序
排序过程如下
例1:未排序数据——9;3;5;7;0;5
   第一次排序——3;5;7;0;5;9(9比任何其它数都大,排到最后)
   第二次排序——3;5;0;5;7;9(接下来7向后排)
   第三次排序——3;0;5;5;7;9(5向后排)
   第四次排序——0;3;5;5;7;9(3向后排)
例2:未排序数据——0;2;5;1;6;9
   第一次排序——0;2;1;5;6;9(5比大,排到1的后面)
   第二次排序——0;1;2;5;6;9(接下来2向后排,到此为止)
   第三次排序——0;1;2;5;6;9(没有再发生交换)
Private Sub mpsort(ByRef arr() As Long) '冒泡排序
    Dim i AsLong, j As Long, m As Long, tmp As Long
   m = UBound(arr) 'm等于数组上标
    Do While m'至m等于数组下标
       j = m - 1
       m = 0
        Fori = 0 To j
           If arr(i) > arr(i + 1) Then '找到后者大于前者的数
               tmp = arr(i):arr(i) = arr(i + 1):arr(i + 1) = tmp
                m= i '从该位置开始继续查找
            EndIf
        Nexti
    Loop
End Sub
--------------------------------------
快速排序
排序过程如下
例1:未排序数据——9;3;5;7;0;5
   第一次排序——5;3;5;7;0;9
   第二次排序——5;3;5;7;0;9
   第三次排序——5;3;0;7;5;9
   第四次排序——0;3;5;7;5;9
   第五次排序——0;3;5;7;5;9
   第六次排序——0;3;5;7;5;9
   第七次排序——0;3;5;5;7;9
   第八次排序——0;3;5;5;7;9
例2:未排序数字——0;2;5;1;6;9
   第一次排序——0;2;1;5;6;9
   第二次排序——0;1;2;5;6;9
   第三次排序——0;1;2;5;6;9
   第四次排序——0;1;2;5;6;9
Private Sub QuickSort(ByRef arr() As Long,lngL As Long,lngR As Long) '快速排序
'lngL,lngR是排序数组的下标,上标
    Dim i AsLong, j As Long, M As Long, tmp As Long
    i =lngL
    j =lngR
    M = arr((i +j) \ 2)
    tmp =tCenter(arr(i), M, arr(j))'取轴枢,既作为比较的那个数
    While i <j
        Whilei < lngR And arr(i) < tmp '求lngI使N(i)小于轴枢
            i= i + 1
        Wend
        Whilej > lngL And arr(j) > tmp '求lngJ使N(j)大于轴枢
            j= j - 1
        Wend
       If i <= j Then '不出错,交换N(i)和N(j)
           M = arr(i) : arr(i) = arr(j) : arr(j) = M
           i = i + 1 : j = j - 1
       End If
    Wend
    If lngL <j Then: Call QuickSort(arr,lngL, j) '改变位置,递归调用
    If i <lngR Then: Call QuickSort(arr,i, lngR)
End Sub
---------------
Private Function tCenter(a As Long, b As Long, c As Long)As Long '取三者中的中间项
    If (a >=b And b >= c) Or (c >= b And b >= a) Then tCenter =b
    If (a >=c And c >= b) Or (b >= c And c >= a) Then tCenter =c
    If (b >=a And a >= c) Or (c >= a And a >= b) Then tCenter =a
End Function
--------------------------------------
插入排序
排序过程如下
例1:未排序数据——9;3;5;7;0;5
   第一次排序——0;3;9;5;7;5
   第二次排序——0;3;9;5;7;5
   第三次排序——0;3;5;9;7;5
   第四次排序——0;3;5;5;7;9
   第五次排序——0;3;5;5;7;9
   第六次排序——0;3;5;5;7;9
例2:未排序数据——0;2;5;1;6;9
   第一次排序——0;1;2;5;6;9
   第二次排序——0;1;2;5;6;9
   第三次排序——0;1;2;5;6;9
   第四次排序——0;1;2;5;6;9
   第五次排序——0;1;2;5;6;9
   第六次排序——0;1;2;5;6;9
Private Sub insort(ByRef arr() As Long) '插入排序
    Dim i AsLong, j As Long, k As Long, M As Long, tmp As Long
    M =UBound(arr)
    For i = 0 ToM'从数组下标到数组上标
       For j = i + 1 To M'从数组的后一位开始
           If arr(j) < arr(i) Then'后者小于前者
               tmp = arr(j)
                Fork = j To i + 1 Step -1'往后移动数组
                   arr(k) = arr(k - 1)
                Nextk
                arr(i)= tmp'插入该数
            EndIf
       Next j
    Next i
End Sub
--------------------------------------
选择排序
排序过程如下
例1:未排序数据——9;3;5;7;0;5
   第一次排序——0;3;5;7;9;5
   第二次排序——0;3;5;7;9;5
   第三次排序——0;3;5;7;9;5
   第四次排序——0;3;5;5;9;7
   第五次排序——0;3;5;5;7;9
   第六次排序——0;3;5;5;7;9
例2:未排序数据——0;2;5;1;6;9
   第一次排序——0;2;5;1;6;9
   第二次排序——0;1;5;2;6;9
   第三次排序——0;1;2;5;6;9
   第四次排序——0;1;2;5;6;9
   第五次排序——0;1;2;5;6;9
   第六次排序——0;1;2;5;6;9
Private Sub selctsort(ByRef arr() As Long) '选择排序
    Dim i AsLong, j As Long, M As Long, k As Long, tmp As Long
    M =UBound(arr)
    For i = 0 ToM '从数组下标开始到数组上标
       k = i
        Forj = i + 1 To M '从后一位开始比较
            Ifarr(j) < arr(k) Then: k = j '挑出最小的数字
        Nextj
       tmp = arr(i) '交换位置
       arr(i) = arr(k) : arr(k) = tmp
    Next i
End Sub
                                                                       






欢迎光临 应用思考-教育技术论坛 (http://etthink.com/) Powered by Discuz! X3.4