快速排序思想
快排的思想是分而治之,在代码中用递归的方法实现。
步骤:
- 先随机选取一个基准值;
- 进行第一遍排序,将小于等于基准值的数都放到左边,大于基准值的数都放到右边;
- 开始递归,分别对左边的数和右边的数重复上述步骤,直到所有子数列只剩下一个数或为空
代码实现要注意的地方
- 递归的终止条件不能写
len(arr)==1
,因此可能会存在基准值是最小值(或最大值)的情况,此时基准值的左边为空(或右边为空),因此有可能为1或0; - 选取完基准值后及时将其从数列中移除,方便后续的遍历;
- 在Python中左右两个数列可以直接用列表的形式表示
- 递推的精髓就在终止条件和return。在return中自己调用自己,本身即代表返回一个值,同时也代表新的排序开始。一开始对递归不熟悉的话感觉这个写法真是太巧妙了。。。
代码
def quick_sort(arr):
# 递归结束
if len(arr)<2:
return arr
# 取中间数作为基准值
mid = arr[len(arr)//2]
# 移除基准数
arr.remove(mid)
# 定义左右两个数列
left, right = [], []
# 划分左右
for item in arr:
if item <= mid:
left.append(item)
else:
right.append(item)
# 开始新的排序
return quick_sort(left) + [mid] + quick_sort(right)
if __name__ == '__main__':
list = [2,3,4,2,2,2,2,2,51,56,2,5]
print(quick_sort(list))
输出结果为:[2, 2, 2, 2, 2, 2, 2, 3, 4, 5, 51, 56]
更具体的内容请参考:https://www.cnblogs.com/xxtalhr/p/10768593.html