4、快速排序
快速排序
1、分而治之
分而治之( divide and conquer, D&C) ——一种著名的递归式问题解决方法 。它不是用于解决问题的算法,而是一种解决问题的思路。
2、思路(方法)
一个由所有小于基准值的数字组成的子数组;
基准值;
一个由所有大于基准值的数组组成的子数组。

3、时间复杂度

4、代码示例
1 #递归求列表和 2 def addSum(numberList): 3 if len(numberList) == 0: 4 return 0 5 else: 6 return numberList[0] + addSum(numberList[1:]) 7 8 if __name__ == '__main__': 9 numberList = [i for i in range(1,10)] 10 result = addSum(numberList) 11 print("the list' sum is %s" % result)
# 递归求列表元素的个数 def listSize(l): if len(l) == 0: return 0 else: return 1 + listSize(l[1:]) if __name__ == '__main__': l = [i for i in range(1,7)] results = listSize(l) print("the length of list is %s" % results)
1 import random 2 3 #递归求列表的最大数字 4 def findMax(l): 5 if len(l) == 2: 6 # 三元表达式 7 return l[0] if l[0] > l[1] else l[1] 8 currentMax = findMax(l[1:]) 9 return l[0] if l[0] > currentMax else currentMax 10 11 if __name__ == '__main__': 12 l = [i for i in range(1,10)] 13 random.shuffle(l) 14 print("the max of the list is %s " % findMax(l))
5、 小结
D&C将问题逐步分解。使用D&C处理列表时,基线条件很可能是空数组或只包含一个元
素的数组。
实现快速排序时,请随机地选择用作基准值的元素。快速排序的平均运行时间为O(n log n)。
大O表示法中的常量有时候事关重大,这就是快速排序比合并排序快的原因所在。
比较简单查找和二分查找时,常量几乎无关紧要,因为列表很长时, O(log n)的速度比O(n)
快得多。

浙公网安备 33010602011771号