Python实现快速排序

#! /usr/bin/env python
#coding=utf-8

import random
#快排的普通版本
def QuickSort(a, p, r):
    if p<r:
        q=Partition(a, p, r)
        QuickSort(a, p, q-1)
        QuickSort(a, q+1, r)

def Partition(a, p, r):
    x=a[r]
    i=p-1
    for j in range(p, r):
        '''如果a[j]>x,则只需将j的值加1即可使循环不变量继续保持;
           如果a[j]<=x,则将下标i的值加1,并交换a[i]和a[j],再将
           j的值加1.此时循环不变量同样得到保持'''        
        if a[j]<=x:
            i=i+1
            a[i], a[j]=a[j], a[i]
    a[i+1], a[r]=a[r], a[i+1]
    return i+1
#快排的随机化版本
def RandomPartition(a, p, r):
    i=random.randint(p, r) #生成的随机数为p=<i<=r
    a[r], a[i]=a[i], a[r]
    return Partition(a, p, r)

def RandomQuickSort(a, p, r):
    if p<r:
        q=RandomPartition(a, p, r)
        RandomQuickSort(a, p, q-1)
        RandomQuickSort(a, q+1, r)


if __name__ == '__main__':
    a1 = [11, 4, 33, 100, -4, 6, 8]
    a2 = [8,10,9,6,4,16,5,13,26,18,2,45,34,23,1,7,3]
    QuickSort(a1, 0, len(a1)-1)
    print a1
    RandomQuickSort(a2, 0, len(a2)-1)
    print a2

运行结果:
[-4, 4, 6, 8, 11, 33, 100]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 16, 18, 23, 26, 34, 45]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值