快速排序 java实现

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arr = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int[] result = split(arr);
        Arrays.stream(result).forEach(item -> System.out.print(item + " "));
    }

    public static int[] split(int[] arr){
        int mid = arr.length / 2;
        if (mid > 0){
           int[] arr1 = split(Arrays.copyOfRange(arr, 0, mid));
           int[] arr2 = split(Arrays.copyOfRange(arr, mid, arr.length));
           return merge(arr1, arr2);
        }else{
            return arr;
        }
    }

    public static int[] merge(int[] arr1, int[] arr2){
        int[] arr = new int[arr1.length + arr2.length];
        int index1 = 0, index2 = 0;
        for(int i = 0; i < arr.length; i++){{
            if (index1 >= arr1.length){
                arr[i] = arr2[index2];
                index2++;
                continue;
            }
            if (index2 >= arr2.length){
                arr[i] = arr1[index1];
                index1++;
                continue;
            }
            int var1 = arr1[index1];
            int var2 = arr2[index2];
            if (var1 < var2){
                arr[i] = var1;
                index1++;
            }
            if (var1 == var2){
                arr[i] = var1;
                index1++;
                arr[++i] = var2;
                index2++;

            }
            if (var1 > var2){
                arr[i] = var2;
                index2++;
            }
        }}
        return arr;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值