|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
排序的方法很多,下面这个也是从网上下载的, 当时用10000个数据测试,崩溃了,花了很长时间,后来只好用10个数据,
下面有3条call, 由于不断的递归引用,虽然我是用f8逐句执行的, 但当运行流向下2个call 语句时,似乎没有规律,非常的凌乱,跳上跳下,这个运行的过程已看的云里雾里了, 看都看不懂,更不要说写出这样的代码了,
希望群里的高手能解释一下,谢谢。
sub xxx()
dim i,j
dim arr(1 to 10)
for i=1 to 10
arr(i)=int(rnd()*10000)
next
call StoogeSort(arr, 1, 10)
range("a1:a10")=application.transpose(arr)
end sub
Sub StoogeSort(MyArray(), i As Long, j As Long)
Dim temp As Long
If MyArray(j) < MyArray(i) Then
temp = MyArray(i)
MyArray(i) = MyArray(j)
MyArray(j) = temp
End If
If (j - i + 1) > 2 Then
temp = (j - i + 1) / 3
Call StoogeSort(MyArray(), i, j - temp)
Call StoogeSort(MyArray(), i + temp, j)
Call StoogeSort(MyArray(), i, j - temp)
End If
End Sub
代码实在是漂亮,可是太神经病了。
时间复杂度O(n^2.7095...),比最糟糕的冒泡还要差,可是代码真的令人着迷啊,能想到这个算法的人也是天才了。
|
|