常用排序演算法之歸併排序

來源:互聯網
上載者:User
'歸併排序
Option Explicit

Dim Result, I
Dim TestData(100)
const N = 100

Randomize
For I = 0 To N - 1
TestData(I) = ROUND(RND() * 32768)
Next

Sub MergeTo(byRef Array, byRef Dest, low, mid, hi)
Dim i, j, k, d
i = low
j = mid
d = low
Do 
    If i = mid or j = hi+1 Then
        Exit Do
    End If
    If Array(i) < Array(j) Then
        Dest(d) = Array(i)
        i = i + 1
    Else
        Dest(d) = Array(j)
        j = j + 1
    End If
    d = d + 1
Loop
For k = i To mid - 1
    Dest(d) = Array(k)
    d = d + 1 
Next
For k = j To hi
    Dest(d) = Array(k)
    d = d + 1 
Next
End Sub

Sub Merge(byRef Array, byRef Temp, low, hi, length)
Dim i, j
for i = low To hi-length  step length*2
    j = i+2*length-1
    If j > hi Then
        j = hi
    End If
    MergeTo Array, Temp, i, i+length, j
next    
For j = i To hi
    Temp(j) = Array(j)
Next
End Sub

'歸併排序,非遞迴
Sub MergeSort(byRef Array, low, hi)
Dim Temp(100), i, Length
Length = hi-low+1
i = 1
Do
    Merge Array, Temp, low, hi, i
     i = i * 2
    Merge Temp, Array, low, hi, i
    i = i * 2
    If i > Length Then
        Exit Do
    End If    
Loop
End Sub

'歸併排序,遞迴
Sub MergeSort1(byRef Array, low, hi)
Dim Temp(100), i, mid

    If low >= hi Then
        Exit Sub
    End If
    mid = Int((low+hi)/2)
    MergeSort1 Array, low, mid
    MergeSort1 Array, mid+1, hi
    MergeTo Array, temp, low, mid+1, hi
    For i = low To hi
        Array(i) = Temp(i)
    Next
End Sub

MergeSort TestData, 0, N - 1

For I = 0 To N - 1
Result = Result & TestData(I) & VbTab
Next

MsgBox(Result)

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.