第一次写快排代码,做个记录
/**
* 归位算法逻辑
* @author Administrator
*
*/
public class QuickSort {
@Test
public void sortDemo(){
int[] arr = {6,1,2,5,9,3,4,7,10,8};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private void quickSort(int[] arr, int left, int right) {
//退出条件,当传入的参数left>right说明已left = i-1 >=i+1=right不符合逻辑,就是左侧索引大于右侧,这是不被允许的
if(left >=right){
return;
}
//left和i的值不可变更,找变量去代替他们变更
int i = left;
int j = right ;
int baseNum = arr[left];
//确保不相遇循环条件以及操作
while(i!=j){
//右侧坐标左移
while(arr[j]>baseNum&&j>i){
j--;
}
//左侧坐标右移
while(arr[i]<=baseNum&&i<j){
i++;
}
//当他们符合停留条件,交换位置
int temp = arr[i];
arr[i]= arr[j];
arr[j]=temp;
}
//走到这里说明i和j相遇了,执行基础数据归位操作
arr[left] = arr[i];
arr[i] = baseNum;
//开始递归排序
//左侧部分递归逻辑
quickSort(arr, left, i-1);
//右侧部分递归逻辑
quickSort(arr,i+1,right);
}
}