整体思路是分治法
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)