解法一:以最左端的值为标准值
package com.atguigu.sort;
import java.util.Arrays;
/**
* @author cao ziqiang
* @create 2022-10-03 12:47
*/
public class quick {
public static void main(String[] args) {
int[] arr = new int[]{4,1,7,2,44,7};
// int[] arr = new int[]{0,1,2,2,6,6,7,8,9};
quicksort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quicksort(int[] arr,int start,int end){
// 结束递归的条件
if(start < end){
//最左边的元素为标准值
int stand = arr[start];
//定义start为左索引
int low = start;
//定义end为有索引
//防止改变start 和end的值,后续还要利用start和end递归
int high = end;
//只有在左索引<右索引的情况下才判断
while(low < high){
//先判断右边,如果右边的值>=标准值,有索引-1,否则调到左边
//注意不是和左边互换位置
while(low < high && arr[high]>= stand){
high--;
}
arr[low] = arr[high];
//然后判断左边,如果左边的值<=标准值,左边的索引+1继续判断
//如果左边的值>标准值,则将其调到右边
while(low < high && arr[low] <= stand){
low++;
}
arr[high] = arr[low];
}
//到目前为止,有了左右两部分,左边的都<=标准值,右边的都>=标准值
//然后将标准值放在其应在的位置,
arr[low] = stand;
//然后将其左边再分为两部分
quicksort(arr,start,low-1);
//然后将其右边在分为两部分
quicksort(arr,low+1,end);
}
}
}