快速排序!(优化版)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


(荷兰国旗版)

package org.example;

import java.util.Arrays;

public class 快速排序 {
public static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void quickSort(int[]arr,int left,int right){
if(left<right){
int p[] = partition(arr,left,right);//得到等于区的位置范围
quickSort(arr,left,p[0]-1);//继续排序小于区
quickSort(arr,p[1]+1,right);//排序大于区
}
}
public static int[] partition(int[] arr,int left,int right){
int base = arr[right];//边界值?基准?
int less = left-1;
int more = right;
while (left<more){
//小于边界值,小于区扩大1个,将该值加入到小于区的新位置处,指针往下
if(arr[left]<base){
swap(arr,++less,left++);
}
//大于边界值,交换当前值和大于区的前一个数,大于区扩一个
else if(arr[left]>base){
swap(arr,--more,left);
}else {
//相等就不管继续向下走
left++;
}

}
//交换基准和大于区的最后一位数字
swap(arr,right,more);
return new int[]{less+1,more};//返回等于区的位置
}

public static void main(String[] args) {
int[] arr = new int[]{3,5,7,5,4,6,9,5,3,7,1};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
}


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6