排序算法:快速排序

快排的原理:
随便找一个元素,做为轴值,把列表分成左右两个列表,左列表都小于它,又列表都大于它,然后递归把左右列表再排序

规则
1.首先找到一个flag,一般取最后一个元素做轴值。(小于flag)
2,确定指针i,指向flag的前一个元素。i=start-1,i的初始值取-1;j=0 j指向遍历的元素
3,规则:用j指向的元素,和flag做比较。如果listx[j]>flag:pass;如果listx[j]<=flag:i+=1,listx[i]同listx[j]交换位置;
4、循环结束:listx[i+1]同list[end]交换,flag的下标变成了i+1

这里写图片描述

def quickSort(listx):
    def pathSort(lista,sIndex,eIndex):
        flag=lista[eIndex]
        i=sIndex-1
        for j in xrange(sIndex,eIndex):
            if flag<lista[j]:
                pass
            else:
                i+=1
                lista[i],lista[j]=lista[j],lista[i]
            print j
        lista[eIndex],lista[i+1]=lista[i+1],lista[eIndex]
        return i+1
    def qSort(listb,sIndex,eIndex):
        if sIndex>=eIndex:
            return
        middle=pathSort(listb,sIndex,eIndex)
        qSort(listb,sIndex,middle-1)
        qSort(listb,middle+1,eIndex)
        print listb
    qSort(listx,0,len(listx)-1)
    return listx
if __name__ == '__main__':
    print quickSort([6,1,34,36,4,45,5])

通过一段时间的学习,又发现了一种简单的写法,直接上代码:

def quickSort1(listx):
    xlen=len(listx)
    left=[]
    right=[]
    if xlen<2:
        return listx
    else:
        flag=listx[0]
        for i in xrange(1,xlen):
            if listx[i]>flag:
                right.append(listx[i])
            else:
                left.append(listx[i])
    return quickSort(left)+[flag]+quickSort(right)

是不是更好理解呀!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值