'计数排序,基数排序
Option Explicit
Dim Result, I
Dim TestData(100)
const N = 100
Randomize
For I = 0 To N - 1
TestData(I) = ROUND(RND() * 32768)
Next
'以base^pow位上的数映射到Map
Sub MapTo(byRef Array, byRef Map, low, hi, base, pow)
Dim i, n
n = 1
For i = 1 To pow
n = n * base
Next
For i = low To hi
Map(i) = Int(Array(i) / n) Mod base
Next
End Sub
'以映射进行计数排序
Sub CSortWithMap(byRef Array, byRef Map, low, hi)
Dim Counter(16), Temp(100), i
For i = 0 To uBound(Counter)
Counter(i) = 0
Next
For i = low To hi
Counter(Map(i)) = Counter(Map(i)) + 1
Next
For i = 1 To uBound(Counter)
Counter(i) = Counter(i) + Counter(i-1)
Next
For i = hi To low Step -1
Counter(Map(i)) = Counter(Map(i)) - 1
Temp(Counter(Map(i))) = Array(i)
Next
For i = low To hi
Array(i) = Temp(i)
Next
End Sub
'基数排序
Sub BSort(byRef Array, low, hi)
Dim Map(100), i
For i = 0 To 4
MapTo Array, Map, low, hi, 16, i
CSortWithMap Array, Map, low, hi
Next
End Sub
BSort TestData, 0, N - 1
For I = 0 To N - 1
Result = Result & TestData(I) & VbTab
Next
MsgBox(Result)
'桶排序
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 BSort(byRef Array, low, hi)
Dim Bucket(400, 100), Counter(400), i, j, t, idx
For i = 0 To 399
Counter(i) = 0
Next
For i = low To hi
idx = Int(Array(i) / 100)
j = Counter(idx) - 1
t = Array(i)
Do
If j < 0 Then
Exit Do
End If
If Array(j) > t Then
Bucket(idx, j+1) = Bucket(idx, j)
j = j - 1
Else
Exit Do
End If
Loop
Bucket(idx, j+1) = t
Counter(idx) = Counter(idx) + 1
Next
t = low
For i = 0 To 399
For j = 1 To Counter(i)
Array(t) = Bucket(i, j-1)
t = t + 1
Next
Next
End Sub
BSort TestData, 0, N - 1
For I = 0 To N - 1
Result = Result & TestData(I) & VbTab
Next
MsgBox(Result)
基数排序与桶排序实现
本文介绍了基数排序和桶排序的实现方法,并提供了详细的VBScript代码示例。通过随机生成的数据集展示了这两种非比较型整数排序算法的具体操作流程。
654

被折叠的 条评论
为什么被折叠?



