【经典排序算法】快速排序法 (代码+动图演示)
文章目录
1、动图演示
2、排序的思想
快速排序算法的基本原理为通过一次排序将要排序的数据分割成独立的两部分,将序列分为两部分的中间数作为基准(par),基准左边的数都要比基准右边的数要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
换句话说,快速排序其实是在冒泡排序的基础上做出的一个改进。它利用的是一趟快速排序,基本内容是选择一个数作为基准,然后利用这个基准将遗传数据分为两个部分,第一部分比这个基准数小放其左侧,第二部分都比这个基准数大放其右侧。
3、时间复杂度和空间复杂度
- 时间复杂度: O ( n log 2 n ) O(n\log_2n) O(nlog2n)
- 空间复杂度: O ( n log 2 n ) O(n\log_2n) O(nlog2n)
- 稳定性:不稳定
4、代码实现
快速排序的框架(递归)
void QuickSort(int array[],int left,int right)
{
if(righ-left>1)
{
int div=partion(array,left,right);
QuickSort(array,left,div);
QuickSort(array,div+1,right);
}
}
5、三种分割方法
5.1 hoare法
int partion(int array[],int left,int right)
{
int begin=left;
int end=right-1;
int key=array[right-1];
}
5.2 挖坑法
……
5.3 前后指针法
……