快速排序练习(一)

为了方便,使用了python作为编程语言,具体实现参考了《编程珠玑》

总结一下快速排序的主要步骤为:

1. 选取一个参考值t

2. 经过一次筛选后,分为小于t,t,和大于t三个区间

3. 对小于t,和大于t两个区间进行递归,完成排序

 

方法一:单向循环

 1 #!/usr/bin/env python
 2 
 3 import random
 4 
 5 #构造随机列表
 6 a = range(0,10)
 7 random.shuffle(a)
 8 print a
 9 
10 def qsort1(a, l, u):
11     if l >= u:
12         return
13         
14     #选取列表第一个值为参考,以m为分界点,左边小于等于t,右边大于t
15     m = l
16     t = a[l]
17     
18     #向右循环找小于t的值,如果找到m值加一,同时将该值换到m左侧
19     for i in range(l+1, u+1):
20         if a[i] < t:
21             m += 1
22             a[m],a[i] = a[i],a[m]
23     
24     #循环结束,将参考值换到中间位置,完成一次筛选
25     a[l],a[m] = a[m],a[l]
26     
27     #分别递归,l~m-1和m+1~u两个区间
28     qsort1(a, l, m-1)
29     qsort1(a, m+1, u)
30 
31     
32 qsort1(a, 0, len(a)-1)
33 print a

下图表示了循环过程中的状态

转载于:https://www.cnblogs.com/letusrock/p/4315634.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值