首页 > 编程语言 > 详细

排序基础之(冒泡排序、选择排序、插入排序)

时间:2021-01-20 23:19:15      阅读:44      评论:0      收藏:0      [点我收藏+]

主程序:

Sub mymain()
    Dim MainArr, t
    Application.ScreenUpdating = False
    t = timer
    With ThisWorkbook.Worksheets("排序")
        MainArr = .Range("a2: a" & Cells(Rows.Count, "a").End(xlUp).Row)
        InsertionSort arr:=MainArr
        .Range("c2").Resize(UBound(MainArr), 1) = MainArr
    End With
    MsgBox Format(timer - t, "0.00s")
    Application.ScreenUpdating = True
End Sub

1、冒泡排序运作方式:
1.1、比较相邻的两个元素,按所需顺序决定是否交换。
1.2、对每一对相邻元素进行同样的工作,从第一对至最后一对。结束后,最后一个元素应该是所需顺序的最值(如所需顺序为由小至大,则为最大值)。
1.3、对所有元素重复上述步骤,除了最后一个。
1.4、重复前述步骤,称前部分需要对比的为无序区,后部分不需要对比的为有序区,直到无序区仅剩一个元素。

Sub BubbleSort(ByRef arr)
    Dim i&, j&, vSwap
    For i = UBound(arr) To 2 Step -1
        For j = 1 To i - 1
            If arr(j, 1) > arr(j + 1, 1) Then
                vSwap = arr(j, 1)
                arr(j, 1) = arr(j + 1, 1)
                arr(j + 1, 1) = vSwap
            End If
        Next
    Next
End Sub

 

2、选择运作方式:
2.1、对(无序区)全部元素由前至后扫描,找出最值。
2.2、将最值元素与(无序区)第一个元素交换,此时前端为有序区,后端为无序区。
2.3、重复上述步骤,直到无序区仅剩一个元素。

 

Sub SelectionSort(ByRef arr)
    Dim i&, j&, vSwap, min&
    For i = 1 To UBound(arr)
        min = i
        For j = i + 1 To UBound(arr)
            If arr(min, 1) > arr(j, 1) Then min = j
        Next
        If min <> i Then
            vSwap = arr(min, 1)
            arr(min, 1) = arr(i, 1)
            arr(i, 1) = vSwap
        End If
    Next
End Sub

3、插入排序运作方式:
3.1、全部元素同样的分为有序区在前和无序区在后,开始时有序区仅有第一个元素。
3.2、取无序区的第一个元素,与有序区中元素由后至前扫描对比。
3.3、将该元素插入至正确位置,该位置(含)之后的有序区元素向后移位,将该位置赋值为该元素。
3.4、重复上述步骤,直至无序区仅剩一个元素

Sub InsertionSort(ByRef arr)
    Dim i&, j&, vTemp
    For i = 2 To UBound(arr)
        vTemp = arr(i, 1)
        For j = i To 2 Step -1
            If arr(j - 1, 1) < vTemp Then Exit For
            arr(j, 1) = arr(j - 1, 1)
        Next
        arr(j, 1) = vTemp
    Next
End Sub

 

 

 

 

 

 

排序基础之(冒泡排序、选择排序、插入排序)

原文:https://www.cnblogs.com/Stefan-Gao/p/14305321.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!