public class QuickSort {
//从小到大排序
public void quickSort(int left, int right, int[] nums){
if(left<right){
//将小于nums[left]的值放左边,大于nums[left]的值放右边
int index = partition(left, right, nums);
//对左边部分进行快速排序
quickSort(left, index, nums);
//对右边部分进行快速排序
quickSort(index+1, right, nums);
}
}
private int partition(int left, int right, int[] nums) {
/** * 这一部分的理解,我们可以假设此时数组排序为【2,1,3,4,5】 * 那么while (left<right&&nums[right]>base) * 会循环到right=1 * 之后数组变化如下 * nums[left]=nums[right] * 【1,1,3,4,5】 * while (left<right&&nums[left]<base)循环到left=1 * nums[right]=nums[left]相当于什么都没做 * 此时left等于right,跳出循环 * 整个过程可以简化为 * base = nums[left] * nums[left]=nums[right] * nums[right]=base */
int base = nums[left];
while (left<right){
while (left<right&&nums[right]>=base){
right--;
}
nums[left] = nums[right];
while (left<right&&nums[left]<=base){
left++;
}
nums[right] = nums[left];
}
nums[right] = base;
return left;
}
public static void main(String[] args) {
int[] nums = {
2,3,1,5,4};
QuickSort quickSort = new QuickSort();
quickSort.quickSort(0,nums.length-1, nums);
for(int num:nums){
System.out.println(num);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179508.html原文链接:https://javaforall.cn