快排过程:
代码如下:
public class QuickSort {
private int partition(int[] nums, int left, int right) {
//获取随机基准数
int random = rangeRandom(left, right);
//小于基准数的边界
int small = left-1;
//将基准数放到最后一位
swap(nums,random,right);
for (int i = left;i<right;i++){
//如果该数小于基准值
if(nums[i]<nums[right]){
//边界右移
small++;
if(small!=i){
swap(nums,small,i);
}
}
}
small++;
swap(nums,small,right);
return small;
}
private int rangeRandom(int start, int end) {
int num = (int) (Math.random() * (end - start + 1) + start);
return num;
}
private void swap(int[] nums, int src, int target) {
int tmp = nums[src];
nums[src] = nums[target];
nums[target] = tmp;
}
public void quickSort(int[] nums,int left,int right){
if( nums.length == 0|| left == right){
return ;
}
int partitionIndex = partition(nums, left, right);
if(partitionIndex>left){
quickSort(nums, left, partitionIndex-1);
}
if(partitionIndex<right){
quickSort(nums, partitionIndex+1, right);
}
}
public static void main(String[] args) {
int[] nums = {9,8,7,4,1,2,3,5,3,5,6};
QuickSort quickSort = new QuickSort();
quickSort.quickSort(nums,0,nums.length-1);
System.out.println(Arrays.toString(nums));
}
}