标签:nbsp 查找 control 元素 str 平均情况 log 工作 需要
快速排序比选择排序要快得多,采用分而治之的思想,具体实现是用递归。
数组为空或只包含一个元素
将数组分解,直到满足基线条件
1 def quicksort(array): 2 if len(array) < 2: 3 return array 4 pivot = array[0] 5 6 lesser = [item for item in array[1:] if item <= pivot] 7 greater = [item for item in array[1:] if item > pivot] 8 9 return quicksort(lesser) + [pivot] + quicksort(greater) 10 11 print(quicksort([5,10,23,222,3,0,12,412,4]))
这里要说一下合并排序,运行时间为O(n log n)。而快速排序在最糟糕的情况下的运行时间是O(n 2 ),与选择排序一样。
但是我们还是要用快速排序,因为快速排序的平均时间是O(n log n)。而合并序有一个常量,等于每次计算都会加上一个常量,所以实际上快速排序速度更快,前提这两种算法的大O运行时间差不多。如果是两种算法的大O运行时间不同,这样常量将无关紧要。比如二分查找和简单查找。
只有每次将第一个元素作为基准值,才会出现最糟糕的情况O(n 2 )。最好的情况O(log n)是每次基准值都是中间值。
当层数为O(log n)(用技术术语说,调用栈的高度为O(log n)),而每层需要的 时间为O(n)。因此整个算法需要的时间为O(n) * O(log n) = O(n log n)。这就是最佳情况。
在最糟情况下,有O(n)层,因此该算法的运行时间为O(n) * O(n) = O(n 2 )。
标签:nbsp 查找 control 元素 str 平均情况 log 工作 需要
原文地址:https://www.cnblogs.com/lshedward/p/10447608.html