分而治之与递归
快速排序
分而治之D&C与递归
D&C算法是递归的,使用D&C解决问题的过程包括两个步骤:
(1)找出基线条件(base case),这种条件必须尽可能简单;
(2)不断地将问题分解(缩小规模),直到符合基线条件
递归求和
def sum2(arr):
if arr == []: # base case
return 0
# recursive case
return arr[0] + sum2(arr[1:])
递归求列表中最大值
def findmax(arr):
if len(arr) == 2: # base case
return arr[0] if arr[0]>arr[1] else arr[1]
# recursive case
return arr[0] if arr[0] > findmax(arr[1:]) else findmax(arr[1:])
递归与快速排序
def quicksort(array):
if len(array) < 2:
return array # base case: array that is empty or contains
# only one element is ordered
else:
pivot = array[0] # recursive case and pivot, partitioning
less = [i for i in array[1:] if i <= pivot]
greater = [i for i in array[1:] if i > pivoy]
return quicksort(less) + [pivot] + quicksort(greater)
[美] Aditya Bhargava 著 袁国忠 译. 算法图解