b站学习的,自己写一遍加深记忆
思想
①先选择一个基准数作为参照物(例如第一个数)
②小于基准数的放在左边,一直小于就一直给left++
大于的放在右边,一直大于就right–
知道他们相等,然后把基准值赋给arrleft
③ 递归方法 分别对左边的和右边的进行递归操作,就可以了
import java.util.Arrays;
public class Sort {
public static void main(String[] args) {
int [] arr={19,91,9,17,1,8};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int arr[],int l,int r)
{
if(l>=r)
{
return;
}
int left=l,right=r;
int provit=arr[left];
while(left<right)
{
//如果右边的值一直大于基准值,那么right就一直减减
while(left<right&&arr[right]>provit)
{
right--;
}
if(left<right)
{
arr[left]=arr[right];
}
//如果左边的值一直小于基准值,那么left就一直加加
while (left<right&&arr[left]<provit)
{
left++;
}
if(left<right)
{
arr[right]=arr[left];
}
//如果他们right==left了 第一轮的排序就结束,把基准值赋予他们相等的地方
if(left>=right)
{
arr[left]=provit;
}
}
//然后递归实现 left==right 左边与右边的排序
System.out.println("..........1");
//左边的
quickSort(arr,l,right-1);
//右边的
quickSort(arr,left+1,r);
}
}