——每次都使用第一个数作为基准数
原理及过程
1.首先 我们选择一个数列lista = [18,12,4,65,24,9,66,15,88,13,21,25,16,1,43]
2.我们取第一个数 [18] 为基准数 base = lista[0]
3.我们再新建两个列表方便排列分别为:左子数组 less = [ ] 右子数组 greater = [ ]
4.将小于 [18] 的数放到左子数组less中,将大于 等于[18] 的数放到右子数组greater中:
less=[12,4,9,15,13,16,1] base=[18] greater=[65,24,66,88,21,25,43]
5.再重复以上步骤将左子数组和右子数组进行排列
less = [4, 9,1] [12] [15,13,16]
greater = [24,21,25,43] [65] [66,88]
6. 最后将所有数组相加
[18,12,4,65,24,9,66,15,88,13,21,25,16,1,43]
第一次排序
[12,4,9,15,13,16,1] [18] [65,24,66,88,21,25,43]
第二次排序
[4, 9,1] [12] [15,13,16] [18] [24,21,25,43] [65] [66,88]
第三次排序
[1] [4] [9] [12] [13] [15] [16] [18] [21] [24][25,43] [65] [66,88]
代码如下:
lista = [18,12,4,65,24,9,66,15,88,13,21,25,16,1,43]
def quick(lista):
if len(lista) >= 2: #如果列表的长度小于等于1
#左,子数组
less = []
# 右,子数组
greater = []
# 基准数
base = lista[0] #选择第一个值为分界元素
lista.remove(base)
# 对原数组进行划分
for x in lista:
if x < base:
less.append(x)
else:
greater.append(x)
else:
return lista
#递归调用
return quick(less) + [base] + quick(greater)
print(quick(lista))