先找个中轴上的值,把小于中轴值的放在左边,大于中轴值的放在右边,然后依次
向左递归或者向右递归
/*
*快速排序法
* 时间复杂度 :
*/
public void quickSort(int arr[],int left,int right){
int l=left;//最左边下标
int r=right;//最右边下标
int povit=arr[(left+right)/2];//中轴的值
int temp=0;//临时变量 作为交换时使用
//如果最左边小于最右边,比povit大的放到最右边
while ( l < r ){
//在povit的左边一定比povit小
while (arr[l]<povit){
l+=1;
}
//在pivot的右边一直找 在povit的右边一定比povit大
while (arr[r]>povit){
r-=1;
}
//如果l>=r 说明pivot 的左右两的值,已按照左边全部是
//小于等于pivot的值,右边全部是大于等于pivot值
if(l>=r){
break;
}
//交换
temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;
//交换完后,发现这个arr[l]==pivot的值相等--,前移动
if(arr[l]==povit){
r-=1;
}
//交换完后,发现这个arr[r]==pivot的值相等l++,后移动
if(arr[r]==povit){
l+=1;
}
}
//如果l==r 必须l++ r--,否则会出现栈溢出
if(l==r){
l+=1;
r-=1;
}
//向左递归
if(left<r){
quickSort(arr,left,r);
}
//向右递归
if(right > l){
quickSort(arr,l,right);
}
}
快速排序算法
最新推荐文章于 2022-08-23 11:38:17 发布