写一下快速排序

public class QuickSort {


    public static void main(String[] args) {
        int[] arr={4,7,3,5,6,2,8,1};
        qSort(arr,0,arr.length-1);

            System.out.println(Arrays.toString(arr));

    }


    /**
     * 快速排序
     * 首先选取当前排序数组的最左边的元素作为基准值,
     * 然后取当前数组最右边的元素和基准值进行比较,
     * 如果比基准值大,那么右侧游标向左移一位,继续比较
     * 直到比较出右边的元素比基准值小,那么和基准值做交换,左边的游标向右移动一位
     * 接着比较左边的游标对应的元素和基准值,如果比基准值小,则做游标继续向右移一位
     * 直到比较出比基准值大的元素,那么将左游标对应的元素和此时右游标的基准值进行交换,
     * 继续下一轮右游标比较,直到左右游标相等,说明此时左右游标对应的基准值,左边都是比基准值小的元素,右边都是比基准值大的元素
     * 递归左边数组和右边数组。
     * @param data
     * @param left
     * @param right
     */
    public static void qSort(int[] data,int left ,int right){

        int base = data[left];
        int lPoint = left;
        int rPoint = right;

        while(lPoint < rPoint){
            while(lPoint < rPoint && data[rPoint] >= base){
                rPoint--;
            }

            if(lPoint<rPoint){
                int temp =  data[rPoint];
                data[rPoint] = data[lPoint];
                data[lPoint] = temp;
                lPoint++;
            }

            while(lPoint < rPoint && data[lPoint] <= base){
                lPoint++;
            }

            if(lPoint < rPoint){
                int temp =  data[rPoint];
                data[rPoint] = data[lPoint];
                data[lPoint] = temp;
                rPoint--;
            }



        }


        if(left<lPoint){
            qSort(data,left,lPoint-1);
        }

        if(lPoint<right){
            qSort(data,lPoint+1,right);
        }




    }
}

 

posted @ 2021-12-07 09:51  Kyhoon  阅读(34)  评论(0编辑  收藏  举报