快速排序的平均效率为O(n * long n),最坏的情况为O(n^2),这和之前的选择排序法效率快很多,但也有局限性。
假设有2个数组,一个数组为空,另外一个为1,[_,1]
,那么排序就知道返回的是1,没有可比性,那如果有3个都有值的数组呢?
那么我们取中间的
2
为比较量,把小于2的放在左边,把大于2的放在右边。那么就行成了外部有序的数组,内部是无序的。什么意思呢? 整体看是从小到大的顺序排列,而内部顺序还未排序 [ [无序(小于2的数组)] 2 [无序(大于2的数组)] ]
就是这个意思,那么快速排序法就是将多个元素的数组,一直筛选到没有可比性为止。
python
def quicksort(array): if len(array)<2: return array else: index=math.ceil((len(array) - 1) / 2) piovt=array[index] #选出大于piovt的值 greater=[i for i in array if i > piovt] #选出小于piovt的值 less=[i for i in array if i < piovt] #选出等于piovt的值 center=[array[i] for i in range(0,len(array)) if array[i]==piovt and i!=index] return quicksort(less) + [piovt]+ center +quicksort(greater) if __name__ == '__main__': print(quicksort([5,3,3,2,12,3,5]))
输出结果:[2, 3, 3, 3, 5, 5, 12]
文章来源: 快速排序法