上来就上代码
ef quick_sort(lst, left, right):
if left >= right:
return lst
elif right-left == 1:
if lst[left] > lst[right]:
lst[left], lst[right] = lst[right], lst[left]
return lst
else:
i = left
j = right
povit = left
povit_e = lst[povit]
while i < j:
while i < j:
# 从右往左扫描,找到一个小于基准值的元素,将其与空出来的i坑交换
# 第一次实际是填入最左端的基准元素,该元素已经被保存!
if lst[j] >= povit_e:
j -= 1
else:
lst[i] = lst[j]
i += 1
while i < j:
# 从左往右扫描,找到一个大于等于基准值的元素,将其与空出来的坑交换
if lst[i] < povit_e:
i += 1
else:
lst[j] = lst[i]
j -= 1
# 所有元素已经分布于基准元素两侧,最终中间位置填入基准元素
lst[i] = povit_e
# 调用递归,对左右子列表进行下一轮
quick_sort(lst, left, i-1)
quick_sort(lst, i+1, right)
return lst
if __name__ == "__main__":
a = [1,3,45,65,21,12,2,2,78,54,56,23]
b = quick_sort(a, 0 ,len(a)-1)
print b
print "-----------------------------------------------"
aa = [1,11,1,1,1,1,1,1,1,1,1,11,1,1,1,1,1,1,11,11]
bb = quick_sort(aa, 0 ,len(aa)-1)
print bb
print "-----------------------------------------------"
aaa = [0,0,0,0,0,0,2,2,2,2,2,1,1,1,1,1,1]
bbb = quick_sort(aaa, 0 , len(aaa)-1)
print bbb
print "-----------------------------------------------"
ss = ["aa", "a", "a","aa", "aaa","b","f","e"]
ssbb = quick_sort(ss, 0, len(ss)-1)
print(ssbb)
执行看结果
C:\Python27\python.exe D:/代码/python-DP/QuickSort.py
[1, 2, 2, 2, 2, 2, 2, 3, 23, 23, 23, 78]
-----------------------------------------------
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 11, 11]
-----------------------------------------------
[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2]
-----------------------------------------------
['a', 'a', 'aa', 'aa', 'aaa', 'b', 'e', 'f']
Process finished with exit code 0