快排模板
public static void quick_sort(int[] arr ,int L,int R) {
if(L>=R)return;
int i=L-1,j=R+1;
int var=arr[L];
while(i<j) {
do i++;while(arr[i]<var);
do j--;while(arr[j]>var);
if(i<j) {
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
quick_sort(arr,L,j);
quick_sort(arr,j+1,R);
}
快排的思路
首先一组数据 找一个基准数(这里选用数组的第一位做基准数据)
之后i从前往后扫,找到一个大于(或等于)基准数据的数
j从后往前扫,找到一个一个小于(或等于)基准数据的数
之后将这两个数位置交换
这样
比基准数小的(或者相等的)就跑到了基准数的左边
比基准数大的(或者相等的)就跑到了基准数的右边
然后 数组分成了两部分 前一部分,和后一部分,
然后再一次排左右,最终 整个数组排序完成
时间复杂度,
平均 O ( n l o g n ) O(nlogn) O(nlogn) 最差 O ( n 2 ) O(n^2) O(n2)
空间
O ( l o g n ) O(log_n) O(logn)
是不是感觉相等的有点别扭
因为我在学习的过程中也发现了这个问题
比如遇到 222222222 这种数组 快排就退化严重 当然 后面有其他排序方式