学习快速排序算法
对快速排序法很有兴趣,于是写个一维数组的排序函数.无他,只为学习算法.
供对算法有兴趣的爱好者共同学习.
#include <array.au3>
Local $array
for $i=0 to 999
$array[$i]=Random(1,10000,1)
Next
$time=TimerInit()
quicksort($array, 0, 999)
_arraydisplay($array,TimerDiff($time))
Func quickpass(ByRef $array, $low, $high)
Dim $i = $low
Dim $j = $high
Dim $x = $array[$i]
While $i < $j
While $array[$j] >= $x And $i < $j
$j -= 1
WEnd
If $i < $j Then
$array[$i] = $array[$j]
While $array[$i] <= $x And $i < $j
$i += 1
WEnd
If $i < $j Then $array[$j] = $array[$i]
EndIf
WEnd
$array[$i] = $x
Return $i
EndFunc ;==>quickpass
Func quicksort(ByRef $array, $low, $high)
If $low < $high Then
Dim $k
$k = quickpass($array, $low, $high)
quicksort($array, $low, $k - 1)
quicksort($array, $k + 1, $high)
EndIf
EndFunc ;==>quicksort
另一个算法,同容相同,写法不同而已
#include <array.au3>
local $array;=
for $i=0 to 99
$array[$i]=Random(1,10000,1)
Next
$timer=TimerInit()
quicksort($array,0,99)
;_ArraySort($array)
_arraydisplay($array,TimerDiff($timer))
func quicksort(ByRef $arr,$beg=0,$end=0)
If $End <= $beg Then Return
If $End < 1 Or $End > UBound($arr)-1 Then $End = UBound($arr)-1
If $beg < 0 Then $beg = 0
If $beg > $End Then Return SetError(2, 0, 0)
local $key=$arr[$beg]
local $l=$beg
local $h=$end
While $l<$h
while $key<=$arr[$h] and $l<$h
$h-=1
WEnd
$arr[$l]=$arr[$h]
while $arr[$l]<=$key and $l<$h
$l+=1
WEnd
$arr[$h]=$arr[$l]
WEnd
$arr[$l]=$key
$l+=1
quicksort($Arr, $beg, $h)
quicksort($Arr, $l, $end)
EndFunc 哪种写法好一点呢?我的可能要用到二维数组,对数组的应用一直是我的弱项,我再研究研究…… 下载 ,仔细研究谢谢楼主 下载 ,仔细研究谢谢楼主 慢慢学习,研磨 算法很重要啊.学习了 谢谢 不错,有用! 对于浮点数不起作用。。。 谢谢分享! 谢谢分享! 多谢.看看新算法 这个收下 ~ 一直还没用用过排序的功能。收藏一下 感谢楼主分享,目前只会用传统的冒泡
页:
[1]
2