public class quickSort {
public static void main(String[] args){
int[] arr={2,7,9,3,6,5,4};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr,int left,int right){
//终止条件:left>=right,不断分裂
if(left>=right){
return;
}
//把第一个数当作base
int base=arr[left];
//新建两个指针,一个指向第一个数,一个指向最后一个数
int i = left;
int j = right;
//左右指针移动
while(i<j){
//j指针从右找第一个比base小的数,所以当arr[j]>=base的时候,j指针向左移动
while(arr[j]>=base&&i<j){
j--;
}
//i指针从右找第一个比base大的数,所以当arr[i]<=base的时候,i指针向右移动
while(arr[i]<=base&&i<j){
i++;
}
//当找到两个数之后,两个数交换
int temp = arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
//当两个指针相遇的时候,与base交换
arr[left]=arr[i];
arr[i]=base;
//把数组分成俩,重写进行递归,直到分裂到不能在分裂,对应最上面的终止条件
quickSort(arr,left,i-1);
quickSort(arr,i+1,right);
}
}
06-09