常用排序算法之计数排序,基数排序与桶排序
2008-04-06 10:53
239 查看
'计数排序,基数排序
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)
相关文章推荐
- 三种线性排序算法 计数排序、桶排序与基数排序
- 计数排序、桶排序和基数排序
- 【数据结构与算法】内部排序之五:计数排序、基数排序和桶排序(含完整源码)
- 计数排序(Counting Sort)、桶排序(Bucket Sort)和基数排序(Radix Sort)
- 三种线性排序算法 计数排序、桶排序与基数排序
- 小白进阶之线性排序算法之计数排序、基数排序和桶排序
- 基数排序与桶排序,计数排序【详解】
- 数字的排序算法—计数排序、桶排序和基数排序
- 三种线性排序算法:计数排序、桶排序与基数排序
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- Python线性时间排序——桶排序、基数排序与计数排序
- 排序算法之计数排序、基数排序和桶排序
- 基于非比較的排序:计数排序(countSort),桶排序(bucketSort),基数排序(radixSort)
- 计数排序、桶排序和基数排序
- 计数排序,基数排序和桶排序
- 计数排序、桶排序和基数排序
- 计数排序、桶排序和基数排序
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 内部排序之五:计数排序、基数排序和桶排序
- 【数据结构与算法】内部排序之五:计数排序、基数排序和桶排序(含完整源码)