快速排序【Java實現】

在這裏插入圖片描述

    public static void main(String[] args) {
        int arr[] = {60,30,70,90,50,10,40,80};
        System.out.println("排序前:"+ Arrays.toString(arr));
        quickSort(arr,0,arr.length-1);
    }

    /*
     * 左標記的作用是找到一個比基準值pivot大的數字
     * 右標記的作用是找到一個比基準值pivot小的數字
     *
     * */

    public static void quickSort(int[] arr,int left,int right){
        //進行判斷,left不能比right大
        if(left > right){
            return;
        }
        //定義變量保存基準數
        int base = arr[left];
        //定義變量i,指向最左邊
        int i = left;
        //定義變量j,指向最右邊
        int j = right;

        //當i和j不相遇時,在循環中進行檢索
        while(i != j){
            //先由j從右往左檢索比基準數小的,如果檢索到比基準數小的就停下
            //也就是說如果檢索到比基準數大的或者相等的,就繼續檢索
            while(arr[j] >= base && i<j){
                j--;    //j從右往左移動
            }
            //i從左往右檢索比基準數大的
            while (arr[i] <= base && i<j){
                i++;    //i從左往右移動
            }

            //代碼走到這裏,說明i和j都停下了,然後交換i和j位置的元素
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //代碼走到這裏 說明 i=j
        // i和j相遇了,交換基準數和相遇位置的元素
        arr[left] = arr[i];
        arr[i] = base;
        //基準數在這裏歸位了,左邊的數字都比他小,右邊的數字都比他大
        //基準數歸位後,排基準數的左邊。
        quickSort(arr,left,i-1);
        //排基準數的右邊
        quickSort(arr,i+1,right);

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

運行結果:

排序前:[60, 30, 70, 90, 50, 10, 40, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 90, 70, 80]
[10, 30, 40, 50, 60, 70, 80, 90]
[10, 30, 40, 50, 60, 70, 80, 90]
[10, 30, 40, 50, 60, 70, 80, 90]
[10, 30, 40, 50, 60, 70, 80, 90]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章