快速排序最优的情况就是当关键值位于序列中间时
快速排序最坏的情况就是对已序的序列进行排序
时间复杂度:O(N^2)最差
使用场景:数据量大而杂乱的序列,避免出现最坏的情况
快速排序递归算法之分治法
基本思路:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
//取一个关键元素,将序列分为两部分,然后分别排序
int partion(int arr[], int left, int right)
{
int begin = left;
int end = right-1;
int key = arr[right];//关键元素
while (begin < end)
{
//找到一个比关键元素大的元素
while (begin<end&&arr[begin] <= key)
begin++;
//找到一个比关键元素晓得元素
while (begin<end&&arr[end] >= key)
end--;
if (begin<end)
{
//交换
std::swap(arr[begin], arr[end]);
begin++;
end--;