Chinaunix首页 | 论坛 | 博客
  • 博客访问: 179823
  • 博文数量: 42
  • 博客积分: 2185
  • 博客等级: 大尉
  • 技术积分: 455
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 21:32
文章分类

全部博文(42)

文章存档

2012年(5)

2011年(13)

2010年(6)

2009年(18)

我的朋友

分类: Python/Ruby

2009-12-05 14:29:45

02 - quicksort


import random

def quicksort(L):
    ln = len(L)

    def _xchg(_A, _l, _r):
        t = _A[_l]
        _A[_l] = _A[_r]
        _A[_r] = t

    def _rand_part(A, p, r):
        def _part(_A, _p, _r):
            x = _A[_r - 1]
            i = _p

            for j in range(_p, _r - 1):
                if _A[j] < x:
                    _xchg(_A, i, j)
                    i += 1
            _xchg(_A, i, _r - 1)
            return i

        i = random.randrange(p, r)
        _xchg(A, i, r - 1)
        return _part(A, p, r)

    def _quicksort(A, p, r):
        if p < r:
            q = _rand_part(A, p, r)
            _quicksort(A, p, q)
            _quicksort(A, q + 1, r)

    _quicksort(L, 0, ln)

if __name__ == '__main__':
    import sys

    num = 100
    if len(sys.argv) == 2:
        num = int(sys.argv[1])

    L = [ random.randrange(10, 1000) for x in range(num) ]

    print L

    quicksort(L)

    print L


阅读(1033) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

sigsegv112009-12-17 13:19:10

quick sort in haskell [code] qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs) [/code]