/*笔者刚学习算法的时候,因为思考的不够全面,导致直接使用红色标注的地方,导致测试的时候出现异常,注意测试的时候,最后一个参数必须是arr.length-1,否则会出现数组越界。这两处的坑,笔者都踩过,在问题中学习 进步是很重要的
*/
public class QuickSort {
public static void quickSort(int[] arr, int head, int tail){
//if数组为空,长度为“0”,low>high那么返回空
if(head>=tail||arr.length<=1||arr==null){
return ;
}
int i=head;
int j=tail;
int pivot = arr[(head + tail) / 2];//数组平均的位置
while(i<=j){
while(arr[i]<pivot){
i++;
}
while(arr[j]>pivot){
j--;
}
//当两个while条件都为false时,那么需要交换两者之间的位置
if(i<j){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}else {
i++;
}
}
//递归调用
//因为在递归调用的时候数组被分成参考数组pivot,一个比pivot大的数组和一个比pivot小的数组,所以需要两个递归调用
//quickSort(arr,head,tail);
quickSort(arr, head, j);
quickSort(arr, i, tail);
}
public static void main(String[] args) {
int arr[]={3,1,2,4,9,6,5,7,8};
//quickSort(arr, 0, arr.length); //如果arr.length不减1,那么会出现数组越界
quickSort(arr, 0, arr.length-1);
for(int arrs:arr){
System.out.println(arrs);
}
}
}