找回密码
 加入
搜索
查看: 13977|回复: 25

[原创] 学习快速排序算法

 火... [复制链接]
发表于 2011-3-19 14:51:10 | 显示全部楼层 |阅读模式
对快速排序法很有兴趣,于是写个一维数组的排序函数.
无他,只为学习算法.
供对算法有兴趣的爱好者共同学习.
#include <array.au3>

Local $array[1000]
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

评分

参与人数 1金钱 +30 贡献 +5 收起 理由
lixiaolong + 30 + 5 学习了!

查看全部评分

 楼主| 发表于 2011-3-19 14:52:56 | 显示全部楼层
另一个算法,同容相同,写法不同而已
#include <array.au3>

local $array[100];=[3,8,7,1,2,5,6,4,44,2,11,35,93,22,12]
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
发表于 2011-4-2 18:20:02 | 显示全部楼层
哪种写法好一点呢?  我的可能要用到二维数组,对数组的应用一直是我的弱项,我再研究研究……
发表于 2011-4-12 10:03:37 | 显示全部楼层
下载 ,仔细研究谢谢楼主
发表于 2011-4-12 10:03:46 | 显示全部楼层
下载 ,仔细研究谢谢楼主
发表于 2012-5-11 20:22:28 | 显示全部楼层
慢慢学习,研磨
发表于 2012-7-11 19:57:16 | 显示全部楼层
算法很重要啊.学习了 谢谢
发表于 2012-12-28 23:05:02 | 显示全部楼层
不错,有用!
发表于 2013-8-5 11:59:04 | 显示全部楼层
对于浮点数不起作用。。。
发表于 2014-1-5 20:17:53 | 显示全部楼层
谢谢分享!
发表于 2014-1-5 21:21:22 | 显示全部楼层
谢谢分享!
发表于 2014-1-6 00:45:56 | 显示全部楼层
多谢.看看新算法
发表于 2014-1-6 02:08:16 | 显示全部楼层
这个收下      ~
发表于 2014-6-20 12:01:38 | 显示全部楼层
一直还没用用过排序的功能。收藏一下
发表于 2014-6-20 18:47:02 | 显示全部楼层
感谢楼主分享,目前只会用传统的冒泡
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-21 22:00 , Processed in 0.078454 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表