python-算法-4.快速排序/
2019-12-01 本文已影响0人
时间之友
前一章深入介绍了递归,本章的重点是使用学到的新技能来解决问题。我们将探索分而治之(divide and conquer,D&C)—— 一种著名的递归式问题解决方法。
4.1 分而治之
用递归求一个 列表所有元素的和
def sum(list): # 重点是找到基线条件 递归条件
if list == [ ]:
return 0
return list[0] + sum(list[1:])
快速排序法,其中用到二分查找的方法:
def quicksort(array):
if len(array) < 2:
return array
else:
# 基线条件:为空或只包含一个元素的数组是“有序”的
pivot = array[0] # 递归条件
less = [i for i in array[1:] if i <= pivot]
greater = [i for i in array[1:] if i > pivot]
# 由所有小于基准值的元素组成的子数组,
# 由所有大于基准值的 元素组成的子数组
return quicksort(less) + [pivot] + quicksort(greater)
print quicksort([10, 5, 2, 3])