快速排序基本思想:
1.选定Pivot中心轴,一般去第一个元素
2.将大于Pivot的数字放在Pivot的右边
3.将小于PIvot的数字放在Pivot的左边
4.分别对左右子序列重复前三步骤操作。
public static void quickSort(int[] arr,int L,int R){
//递归终止条件
if(L>=R){
return;
}
int left = L;
int right = R;
int pivot = arr[left];
//循环的终止条件
while(left<right){
//由于我们pivot初始值是arr[left],所以我们从右边开始取值和pivot比较,
// 如果大于pivot,我们不做任何处理,只让right--,这个循环执行完之后,
// arr[right]应该是小于pivot的
while (left<right && arr[right]>pivot){
right--;
}
//此时我们判断下left是否小于right,如果小于,直接把arr[right]的值赋值给arr[left]
if(left<right){
arr[left] = arr[right];
}
//执行完右边操作之后,我们在执行左边操作,判断arr[left]是否小于pivot,
// 如果小于,我们只让left++,其他什么都不做,这个循环执行完之后,
// arr[left]应该是大于pivot的
while(left<right && arr[left]<pivot){
left++;
}
//判断lef<right
if(left<right){
arr[right] = arr[left];
}
//如果相等,就表示循环结束了
if(left>=right){
arr[left] = pivot;
}
}
//分别执行左子序列和又子序列
quickSort(arr,L,right-1);
quickSort(arr,right+1,R);
}












网友评论