常用排序算法之归并排序

本文介绍了一种高效的排序算法——归并排序,并提供了两种实现方式:递归与非递归。通过对数组进行分解与合并,实现了数据的有效排序。
'归并排序
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
= low
= mid
= 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
= 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 
Arraymid+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)
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值