《算法图解》第四章快速排序

1.先介绍了快速排序的思想:分而治之DC(divede and conquer)

2.引入例子加强理解

def quicksort(arr):

     if len(arr)<2:基线条件

        return arr

     else:

        pivot = arr[0]

        less=[i for i in range[1:] ifarr[i]   i  <pivot]

        gretaer = [i for i in range [1:] ifarr[i]   i >pivot]

     return quicksort(less)+[pivot]+quciksort(greater)  递归条件

3.各种算法的大O

《算法图解》第四章快速排序

4.平均情况和最佳情况

常量:。。。。时间,对二分法和简单排序法影响不大

快速排序依赖于我们选择的基准,不管序列是不是有序的,都继续进行分组,找基准值,判断大小,如果是以开头第一个元素为基准,可能你的栈占用非常大

快速排序的最佳情况是O(log n)层*O(n)判断n次=O(nlogn)

最差情况是O(n)*O(n)=O(n^2)

5小结
D&C将问题逐步分解。使用D&C处理列表时,基线条件很可能是空数组或只包含一个元素的数组。
实现快速排序时,请随机地选择用作基准值的元素。快速排序的平均运行时间为O(nlogn)
O表示法中的常量有时候事关重大,这就是快速排序比合并排序快的原因所在。
比较简单查找和二分查找时,常量几乎无关紧要,因为列表很长时,O(logn)的速度比O(n)快得多。