defquicksort(array):iflen(array)<2:# base case, arrays with 0 or 1 element are already "sorted"#基准条件:为空或者只包含一个元素的数组是有序的,直接返回即可;return arrayelse:# recursive case#递归条件,默认将第一个元素作为基准值; pivot = array[0]# sub-array of all the elements less than the pivot#由所有小于基准值的元素组成的子数组 less = [i for i in array[1:]if i <= pivot]# sub-array of all the elements greater than the pivot#由所有大于基准值的元素组成的子数组 greater = [i for i in array[1:]if i > pivot]returnquicksort(less)+ [pivot] +quicksort(greater)#分别对,左右两个子数组采取同样地处理;print (quicksort([10, 5, 2, 3]))#我去,递归NB输出:[2,3,5,10]
分而治之
本章的重点是使用学到的新技能来解决问题。我们将探索分而治之 (divide and conquer,D&C)——一种著名的递归式问题解决方法。 面对新问题时,你不再束手无策,而是自问:“使用分而治 之能解决吗?” 你将学习第一个重要的D&C算法——快速排序。