文章目录
前言
书接上文 , 本以为希尔排序已经很快很快了,没想到今天的快速排序还要快!!!
太快了太快了,芜湖~~
提示:以下是本篇文章正文内容,下面案例可供参考
一、思路图解
思路非常简单 , 很好理解
二、代码实现
public static void quickSort(int[] arr,int left,int right){
int l = left; //左索引
int r = right; //右索引
int pivot = arr[(left+right)/2]; //中轴
int tmp = 0;
while(l < r){
//左右索引不重合
while(arr[l] < pivot){
//左侧值小于中轴值, 左索引右移遍历
l++;
}
while(arr[r] > pivot){
//右索引左移遍历
r--;
}
if(l >= r){
//如果左右索引重合或相互越界
break;
}
//上述情况均不满足
tmp = arr[l]; //左右交换
arr[l] = arr[r];
arr[r] = tmp;
if(arr[l] == pivot){
//如果索引指示的值等于pivot中轴值,就
r--; //
}
if(arr[r] == pivot){
//如果索引指示的值等于pivot中轴值,就
l++; //
}
}
if(l == r){
l++;
r--;
}
//递归
if(left < r){
//索引还没遍历完整个数组
quickSort(arr,left,r);
}
if(right < l){
quickSort(arr,l,right);
}
}
时间复杂度
平均情况下 , 快排的时间复杂度为O(nlog2n)
,即基于关键字大小排序的下限
彩蛋 : 学算法不如跳舞 !
这是一段来自哔哩哔哩的算法趣味视频 , 值得一看哦 !
同时这个系列还涉及了一些其它算法的舞蹈 , 非常有意思 !