天天看點

VBA: 冒泡排序法的代碼實作

文章背景:冒泡排序(Bubble Sort)是排序算法裡面比較簡單的一個排序,在工作中用到的并不多,主要是想了解其中的算法思想,進而讓我們的思維更加開闊。

基本原理:

  • 從序列頭部開始周遊,兩兩比較,如果前者比後者大,則交換位置,直到最後将最大的數(本次排序最大的數)交換到無序序列的尾部,進而成為有序序列的一部分;
  • 下次周遊時,此前每次周遊後的最大數不再參與排序;
  • 多次重複此操作,直到序列排序完成。
  • 由于在排序的過程中總是小數往前放,大數往後放,類似于氣泡逐漸向上漂浮,是以稱作冒泡排序。

    程式框圖:(示例:一維數組,從小到大排列。)

VBA: 冒泡排序法的代碼實作

代碼實作:

Option Explicit

Sub BubbleSort()

    Dim n As Integer, temp As Double
    Dim i As Integer, j As Integer
    
    n = Selection.Rows.Count
    
    For i = 2 To n
    
        For j = 2 To n - i + 2
        
            If Selection.Cells(j - 1, 1) > Selection.Cells(j, 1) Then
            
                temp = Selection.Cells(j, 1)
                Selection.Cells(j, 1) = Selection.Cells(j - 1, 1)
                Selection.Cells(j - 1, 1) = temp
                
            End If
        
        Next
        
    Next
    
End Sub           

複制

運作效果:http://mpvideo.qpic.cn/0bf2nmaawaaagiabjhdibnqfa26dbnvqacya.f10002.mp4?dis_k=8ffa0f5de40a6d237938ebb0aa35a331&dis_t=1663655418&vid=wxv_1809326013609213954&format_id=10002&support_redirect=0&mmversion=false

參考資料:

[1] 算法之旅 | 冒泡排序法(https://zhuanlan.zhihu.com/p/28965019)

[2] Excel/VBA for Creative Problem Solving, Part 1(https://www.coursera.org/learn/excel-vba-for-creative-problem-solving-part-1/lecture/trGtF/putting-it-all-together-example-2)