快速排序 Python

整体思路是分治法

1.pythonic风格

#pythonic风格
def quicksort1(arr):
    if len(arr)<=1:
        return arr

    key = arr[-1]
    lesser = [i for i in arr[:-1] if i<key]
    greater = [i for i in arr[:-1] if i>=key]
    return quicksort1(lesser)+[key]+quicksort1(greater)

arr = [1,9,6,3,9,7,1]
print 'quicksort1',quicksort1(arr)

2.一般风格

#左右指针法
def quicksort(arr,start,end):
    #最后一个作为key
    print 'start:',arr
    if start<end:
        left,right = start,end
        key = arr[end]
        while left<right:
            while left<right and arr[left]<=key:
                left+=1

            arr[left],arr[right] = arr[right],arr[left]
            while left<right and arr[right]>=key:
                right-=1
            #print 'swap_before',arr
            arr[left],arr[right] = arr[right],arr[left]
            #print 'swap_after',arr

        arr[right] = key
        quicksort(arr,start,left-1)
        quicksort(arr,left+1,end)
    return arr


arr= [1,9,6,3,9,7,1]
#arr=[1, 4, 7, 1, 5, 5, 3, 85, 34, 75, 23, 75, 2, 0]
print quicksort(arr,0,len(arr)-1)

快速排序的时间复杂度为O(nlog2^n)
快排序的最坏的情况下就是,所选的元素恰好是最小的或者最大的,此时没有达到分治的效果,便退化成了冒泡排序,时间复杂度为O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值