快速排序实现 (Java)
作者:互联网
快速排序实现
- 核心:找到支点,将小于支点的元素放到左侧,大于支点的元素放到右侧
public void quickSort(int []nums, int left, int right){
if(left < right){
int i = partition(nums, left, right) ; // 确定支点位置
quickSort(nums, left, i - 1);
quickSort(nums, i + 1, right);
}
}
private int partition(int[] nums, int start, int end){
int random = new Random().nextInt(end - start + 1) + start;
int p1 = start - 1; // 小于random位置整数的前一个位置
int p2 = start; // 当前判断的位置
swap(nums, random, end); // 将支点交换到最后一个位置
while(p2 < end){
if(nums[p2] < nums[end]){
p1++;
swap(nums,p1, p2);
}
p2++;
}
//将支点放到最后一个小于支点位置的后一个位置
p1++;
swap(nums, p1, end);
return p1;
}
private void swap(int[] nums, int i, int j){
if(i != j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
标签:p1,end,nums,int,start,支点,Java,排序,快速 来源: https://www.cnblogs.com/yefuyi/p/16322113.html