//快速排序:小的放左边-A-大的放右边,A就排好序了
//主流的划分法:交换法、挖空法
//交换法:左边的大数和右边的小数交换一下就好啦
//挖空法:碰到一个不好的数就换一下
//这个正宗合理
代码实现
public static void quickSort(int[] arr,int left,int right){
if (left>=right){
//递归结束的条件
return;
}
//key为基准数
int key =arr[left];
int i=left;
int j=right;
while (i<j){
//因为基数是左,所以要从右边先找
//第一个位置的值被保存了,所以可以覆盖掉,最后一步再将第一个值给填回来。
while (i<j&&arr[j]>=key){
//从最右向左找到第一个小于p的位置j
j--;
}
while (i<j&&arr[i]<=key){
//从最左向右找到第一个大于p的位置j
i++;
}
if (i<j){
//交换i和j
swap(arr,i,j);
}
}
//当i和j相遇时,说明temp的左边数都小于等于key,右边的数都大于等于key
//交换key和结束时的值
swap(arr,i,left);
//temp位置已经确定,递归快速排序左右两边的数
quickSort(arr,left,i-1); //i-1排除中间的基数
quickSort(arr,j+1,right);
}
public static void swap(int[] arr,int i,int j){
int temp=0;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
这个up讲解的非常好
视频讲解:
https://www.bilibili.com/video/BV1pd4y1z7gf/?spm_id_from=333.337.search-card.all.click&vd_source=5745b9adf3e729682d6c53f1fa2974ab