标签:log http 结束 排序 这一 复杂 append 分而治之 特殊情况
上述代码有几处可以简化为如下 :
greater,less = [],[]
for i in arr[1:]: 精简版 less = [i for i in arr[1:] if i <= pivot]
if i <= pivot: ==========>>>>> greater = [i for i in arr[1:] if i > pivot]
less.append(i)
else:
greater.append(i)
最坏情况下,时间复杂度为O(n^2)
平均情况下,时间复杂度为O(nlogn)
在快速排序中有两个关键点:
第一,递归出口的判断
对于递归出口,我们可以来考虑几种特殊情况:
当数组中没有元素时,这时应该直接返回就行;当数组中只有一个元素的时候,也应该和直接返回。因此,当数组中元素为空或者仅有一个元素的时候,程序就应该返回。
第二,递归表达式的确定
对于快速排序,从其算法思想来考虑,应该是这样的。
[小于基准] + [基准] + [大于基准]
我们清楚了这一点之后,然后分别对小于基准部分和大于基准部分都来调用快速排序。这样我们就可以得到快排递归表达式。
quicksort(less_part) + [基准] + quicksort(great_part)
快速排序的中间过程,其实就是一棵递归树。当递归到达叶子节点,这时递归也就结束了,程序就执行完毕了。
标签:log http 结束 排序 这一 复杂 append 分而治之 特殊情况
原文地址:http://www.cnblogs.com/vipchenwei/p/6874924.html