java语言实现快排

快排是最常用的一种排序,原理不再赘述,需要注意的点就是取了一个pivot值,最后如果保证pivot值插入中间,而又不涉及太多复杂的操作,这里代码实现没有涉及太多复杂的操作,最终将pivot再存到前后光标重合的位置,就行了


import java.util.Arrays;

public class Sort {

    public static void main(String[] args) {
        int[] i = {1, 32, 54, 454, 3, 254, 654, 24, 65, 23, 87, 3543, 212};
        sortArr(i);
        System.out.println(Arrays.toString(i));
    }

    static void sortArr(int[] arr) {
        int first = 0;
        int last = arr.length - 1;
        quicklySort(first, last, arr);
    }

    static void quicklySort(int fir, int la, int[] arr) {
        int mid = getMid(fir, la, arr);
        if (fir < mid - 1) {
            quicklySort(fir, mid - 1, arr);
        }
        if (mid + 1 < la) {
            quicklySort(mid + 1, la, arr);
        }
    }

    static int getMid(int fir, int la, int[] arr) {
        int pivot = arr[fir];
        boolean backFlat = true;
        while (fir < la) {
            if (backFlat) {
                if (arr[la] < pivot) {
                    arr[fir++] = arr[la];
                    backFlat = false;
                } else {
                    la--;
                }
            } else {
                if (arr[fir] > pivot) {
                    arr[la--] = arr[fir];
                    backFlat = true;
                } else {
                    fir++;
                }
            }
        }
        arr[fir] = pivot;
        return fir;
    }
}




 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值