4、快速排序

快速排序

1、分而治之

分而治之divide and conquerD&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)
快得多。

 

 

posted @ 2020-10-31 09:36  Dammond  阅读(85)  评论(0)    收藏  举报