一 原理:
取数组里第一个数为参照数,分为左右两个数组。left 是存放小于等于参照数的元素,
right存放大于参照数的元素。分别递归操作左右数组,直到左右数组长度为1。
分析:
对于a=[3,4,1,5]
quick_sort([1])+[3]+quick_sort([4,5])
[1]+[3]+[4]+quick_sort([5])
[1]+[3]+[4]=[5]
二 代码实现
a=[0,-9,-6,9,5,3,2]
def quick_sort(arr):
if len(arr)<=1:
return arr
temp=arr[0]
left=[i for i in arr[1:] if i<=temp]
right=[i for i in arr[1:] if i>temp]
print("left数组",left)
print("right数组",right)
print("*"*50)
return quick_sort(left)+[temp]+quick_sort(right)
print(quick_sort(a))
三 时间复杂度和稳定性
O(nlogn) 这个复杂度有待再研究一下。
无法保证相同元素的相对位置不发生改变,因此是不稳定的。