引言
快速排序是什么?快速的排序!🤣 平均时间复杂度O(nlogn)
快速排序跟二分和归并排序一样,也属于分治算法。
而分治算法可粗略分成三步。
(1)分解成可解的子问题
(2)求解子问题
(3)合并子问题的解并构成原问题的解。
快速排序的粗略概括
随机从一个待排序区间取一个数x,将区间分成两个区间,
第一区间所有数>= x
,第二区间所有数 <= x
。
然后两个区间各自再随机从自身区间取一个数x,将其自身再次分成两个区间,
同样的,其子第一区间所有数>= x
,子第二区间所有数 <= x
。
如此往复,最终直到区间为空或只有一个数。相当于排序好了。
聪明的小伙伴对加粗字体很敏感,啪的一下,反应很快啊~
随机?若取左右边界的值,当待排序列已经排好序,
那么划分的两个区间大小严重失衡!时间复杂度退化成O(n^2)。
当然取中点值也可以避免这种情况。
分成两个区间 ? 分治算法第一步,分解成可解的子问题
最终直到区间为空或只有一个数?这个