快速排序法
快速排序的平均效率为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]