3mile 发表于 2011-3-19 14:51:10

学习快速排序算法

对快速排序法很有兴趣,于是写个一维数组的排序函数.
无他,只为学习算法.
供对算法有兴趣的爱好者共同学习.
#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

3mile 发表于 2011-3-19 14:52:56

另一个算法,同容相同,写法不同而已
#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

222222 发表于 2011-4-2 18:20:02

哪种写法好一点呢?我的可能要用到二维数组,对数组的应用一直是我的弱项,我再研究研究……

lsszmj 发表于 2011-4-12 10:03:37

下载 ,仔细研究谢谢楼主

lsszmj 发表于 2011-4-12 10:03:46

下载 ,仔细研究谢谢楼主

雪易红 发表于 2012-5-11 20:22:28

慢慢学习,研磨

tutou9997 发表于 2012-7-11 19:57:16

算法很重要啊.学习了 谢谢

xhk32067 发表于 2012-12-28 23:05:02

不错,有用!

maker 发表于 2013-8-5 11:59:04

对于浮点数不起作用。。。

fanan_666 发表于 2014-1-5 20:17:53

谢谢分享!

fanan_666 发表于 2014-1-5 21:21:22

谢谢分享!

rogerabc 发表于 2014-1-6 00:45:56

多谢.看看新算法

terse 发表于 2014-1-6 02:08:16

这个收下      ~

fengzishao 发表于 2014-6-20 12:01:38

一直还没用用过排序的功能。收藏一下

seeking 发表于 2014-6-20 18:47:02

感谢楼主分享,目前只会用传统的冒泡
页: [1] 2
查看完整版本: 学习快速排序算法