排序-快速排序

class QuickSort {
    public static void main(String[] args) {
        int[] nums={11,24,5,32,50,34,54,76};
        System.out.println("快速排序前:"+ Arrays.toString(nums));
        quickSort(nums,0,nums.length-1);
        System.out.println("快速排序后:"+ Arrays.toString(nums));
    }
    public static void quickSort(int[] nums, int start, int end){
        if(start>end) return;
        int i,j,base;
        i=start;
        j=end;
        base=nums[start];
        while (i<j){
            while (i<j && nums[j]>=base) j--;   //从右边开始找,找比base小的
            while (i<j && nums[i]<=base) i++;   //从左边开始找,找比base大的
            if(i<j){
                swap(nums,i,j);
            }
        }
                                             //循环结束找到第一个i值,也就是当前base最终的位置
        swap(nums,start,i);                  //交换base值与当前位置的值                     
        quickSort(nums,start,j-1);
        quickSort(nums,j+1,end);
    }
    public static void swap(int[] nums,int left,int right){
        int temp=nums[left];
        nums[left]=nums[right];
        nums[right]=temp;
    }
}

快速排序:

记忆秘诀:

快速排序有两个函数,一个比较找i位置的函数,一个交换函数

比较找i位置函数:base值=num[start],然后从两边开始对比,右边找小的,左边找大的,找到就交换,知道i相遇j,这就是base最终的位置,然后交换num[start]和num[i]也就是num[j],此时的i=j,然后接着快排num[start]---num[i-1]和num[i+1]---num[end]的。

交换函数:就是简单的交换两个数的位置

1、首先快速排序需要三个参数:排序的数组num[]、左边界i,右边界j

2、以第一个num[i]为base值,然后从两边开始比较

3、先从右边num[j]开始找比base小的值,找到后停下来,左边开始从i开始找比base大的值,找到后停下来,判断当前i是否小于j,如果小于,那交换num[i]、num[j]。

4、交换完之后接着进行重复的工作,知道i=j了,也就是第一次遍历相遇了,第一次遍历结束,找到了base最终的位置,也就是此时i的值,同时也是j的值,将base值与i值交换

5、接着快拍start----i-1和i+1-----end两段

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智博的自留地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值