java实现快速排序三种方法(推荐方法三)

博客对比了两种代码方法,指出第一种方法相对较好,不用交换‘cun’的值,最后将其赋值给中间变量;第二种方法每次交换‘cun’的值。还给出了目前见到的最简洁的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:

​
package paixu;

import java.util.Arrays;

/**
 * 快速排序
 */
public class fastSort {

    public static void main(String[] args) {
        int[] nums = new int[]{23,34,45,56,67,4,3,2,3,4};
        sort(nums,0,9);
        System.out.println(Arrays.toString(nums));
    }
    public static void sort(int[] nums,int start,int end){
        int cun = nums[start];
        int qian = start;
        int hou = end;
        while (qian<hou){
            while (qian<hou && nums[hou]>=cun){
                hou--;
            }
            if(nums[hou]<cun){
                nums[qian++] = nums[hou];

            }
            while (qian<hou && nums[qian]<=cun){
                qian++;
            }
            if(nums[qian]>cun){
                nums[hou--] = nums[qian];
            }
        }
        nums[qian] = cun;
        if(start<qian) {sort(nums,start,qian-1);}
        if(hou<end) {sort(nums,qian+1,end);}
    }
}

​

方法二:

package paixu;

import java.util.Arrays;

/**
 * 快速排序
 */
public class fastSort {

    public static void main(String[] args) {
        int[] nums = new int[]{23,34,45,56,67,4,3,2,3,4};
        sort(nums,0,9);
        System.out.println(Arrays.toString(nums));
    }
    public static void sort(int[] nums,int start,int end){
        int cun = nums[start];
        int qian = start;
        int hou = end;
        while (qian<hou){
            while (qian<hou && nums[hou]>=cun){
                hou--;
            }
            if(nums[hou]<cun){
               int i = nums[qian];
               nums[qian] = nums[hou];
               nums[hou] = i;

            }
            while (qian<hou && nums[qian]<=cun){
                qian++;
            }
            if(nums[qian]>cun){
                int i = nums[qian];
                nums[qian] = nums[hou];
                nums[hou] = i;
            }
        }
        if(start<qian) {sort(nums,start,qian-1);}
        if(hou<end) {sort(nums,qian+1,end);}
    }
}

两处代码乍看是一样的,第一种方式相对比较好点,不用交换’cun‘的值,在最后把cun的值赋值给中间的qian==hou的那个变量,第二种方法就每一次交换都让cun跑来跑去,最后才安稳在qian==hou的地方,好吧,就是这个简单思路。

方法3:c++代码实现:

这个是目前为止见到过最简洁的代码(acwing大佬):

void quick_sort(int p[], int l, int r) {
    if (l >= r) return;
    int mid = p[l + r >> 1];
    int i = l - 1, j = r + 1;
    while (i < j) {
        while (p[++i] < mid);
        while (p[--j] > mid);
        if (i < j) swap(p[i], p[j]);
    }
    quick_sort(p, l, j);
    quick_sort(p, j + 1, r);
    return;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值