java的快速排序

本文介绍了快速排序这种高效的排序算法,它不占用额外空间且排序速度快。通过选取基准数,将数组分为左右两部分,使得基准数左边的元素都小于它,右边的元素都大于它,然后递归地对左右两部分进行排序。提供的Java代码展示了快速排序的详细步骤,包括分区、交换元素和递归调用。
摘要由CSDN通过智能技术生成

简介

快速排序是一种既不浪费空间又可以快一点的排序算法。快速排序只用了本身一个数组,没有使用额外的数组空间。
实现逻辑

  • 先从数组中取一个数作为基准数(通常取第一个数)
  • 分区,将比这个数大的数全放到它的右边,小的数全放到它的左边
  • 再对它的左边和右边继续分区,直到各区间只有一个数

代码(java)

    // l:数组的开始下标  r:数组的结束下标
    public void QuickSort(int[] nums,int l,int r){
        if (l>r){
            return;
        }
        // 选择一个目标值(通常以数组的第一个数为目标)
        int value=nums[l];
        int i=l,j=r;

        while (i<j){
            // 将目标值与数组的最后一个值比较,如果大于目标,则将索引往前移位
            while (i<j&&value<=nums[j]){
                j--;
            }
            // 将目标值与数组的第一个值比较,如果小于目标,则将索引往后移位
            while (i<j&&value>=nums[i]){
                i++;
            }
            // 防止nums[i]>nums[j],这里会有两种情况,一种是i=j,一种是i<j并且nums[i]>nums[j]
            int temp=nums[i];
            nums[i]=nums[j];
            nums[j]=temp;
        }
        // 交换目标值,使得数组中在目标值左边的都小于它,右边的都大于它
        nums[l]=nums[i];
        nums[i]=value;
        // 将目标值左边的数组和右边的数组继续进行排序
        QuickSort(nums,l,i-1);
        QuickSort(nums,i+1,r);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值