'''
1. 取一个基点,将列表分为大于和小于基点值的两部分(除基点外的元素进行划分)
2. 对大于小于的部分,分别再取基点,找到小于大于基点的值
3. 如此反复,直到列表的长度小于等于1(长度为0或者1的数字,是有序的列表)
'''
def quick_sort(arr):
if len(arr) <= 1: # 列表中只有一个元素说明列表已经有序,返回
return arr
pivot = arr[0] # 取列表第一个元素作为基点
lower = [i for i in arr[1:] if i <= pivot] # 取出小于等于基点的元素列表
print("lower: ", lower)
higher = [i for i in arr[1:] if i > pivot] # 取出大于基点的元素列表
print("higher: ", higher)
return quick_sort(lower) + [pivot] + quick_sort(higher) # 递归调用方法,直到列表有序
arr = [1, 11, 10, 2, 6, 5, 2, 9, 7, 4, 8]
print("最终结果:", quick_sort(arr))
快速排序,根据基点分组时,没有将基点元素剔除,导致递归错误。
分组时没有剔除基点,合并时又加上一个基点元素,这样列表长度也会变长,无限递归下去,超出递归的最大深度,