# -*-coding:utf-8
'''
快速排序
'''
def Partition(list, low, high):
'''
以列表中首个元素为基准,将列表中的元素按照与key的大小关系,
调整元素的位置,以使得:
[< key...| key | ... > key]
'''
key = list[low]
while low < high:
while low < high and list[high] >= key: # 从后向前遍历列表,元素大于基准,继续比较:
high -= 1
while low < high and list[high] < key: # 遍历列表,若元素小于基准:
list[low] = list[high]
low += 1
list[high] = list[low]
list[low] = key
return low
def QuickSort(list,low,high):
if low < high:
pivotpos = Partition(list,low,high)
QuickSort(list, low, pivotpos)
QuickSort(list, pivotpos+1, high)
return list
if __name__=='__main__':
list_0 = [4,1,8,13,34,26,10,7,4]
m = len(list_0)
list_1 = QuickSort(list_0, 0, m-1)
print list_1
算法性能:
1. 最坏的情况是每次划分的基准都是当前无序区间中关键字最小的元素,划分的结果是基准左边的子区间为空,而划分的另一个非空的子区间中的元素数目,仅仅比
无序区间元素个数少1,因此,快速排序必须做n-1次划分,第i次划分开始时区间长度为n-i+1,所需的比较次数为n-i,总的比较次数最大是O(n**2);
2. 平均时间复杂度是O(nlog2n),就平均性能而言,快速排序是基于关键字比较排序算法中速度最快的;