Chinaunix首页 | 论坛 | 博客
  • 博客访问: 212585
  • 博文数量: 37
  • 博客积分: 3082
  • 博客等级: 中校
  • 技术积分: 387
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-14 13:59
文章分类
文章存档

2013年(1)

2012年(1)

2011年(2)

2010年(7)

2009年(1)

2008年(13)

2007年(12)

我的朋友

分类: LINUX

2012-02-25 21:22:16

    好长时间没有写算法之类的代码了。(貌似也没写过啥算法)
    晚上看书的时候想要检验一下自己老了木有,随手写一个试试
    当然,表面上看快拍简单,但是调试了一点时间,100w的数组,排序需要14s左右。

  1. def swap(array, x, y):
  2.     array[x],array[y] = array[y],array[x]

  3. def partition(array, begin, end):
  4.     pivo = array[begin]
  5.     l = begin
  6.     for i in xrange(begin + 1, end):
  7.         if array[i] > pivo: continue
  8.         l += 1
  9.         swap(array, i, l)
  10.     swap(array, begin, l)
  11.     return l

  12. def qsort(array, begin, end):
  13.     if begin >= end: return
  14.     mid = partition(array, begin, end)
  15.     qsort(array, begin, mid)
  16.     qsort(array, mid + 1, end)

  17. def main():
  18.     import random
  19.     array = [random.randint(1, 1000000) for i in xrange(1000000)]
  20.     qsort(array, 0, len(array))
  21.     for i in xrange(1, len(array)):
  22.         assert array[i-1] <= array[i]
  23.     print 'ok'

  24. if __name__ == '__main__':
  25.     main()

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