快速排序

分析:

取一個數(shù)P作為基準(zhǔn),然后將小于P的數(shù)放在P的左邊,大于P的數(shù)放在P的右邊

JAVA實現(xiàn):

public class Main {
   
    public static void main(String[] args) {
        int[] arr = new int[100];
        for(int i=0;i<100;i++) {
            arr[i] = (int) (Math.random() * 100);
        }
        sort(arr);
        for(int i=0;i<100;i++){
            System.out.println(arr[i]);
        }
    }
    
    public static void sort(int[] arr) {
        sort(arr, 0, arr.length-1);
    }
    
    public static void sort(int[] arr, int l, int r) {
        if(l > r){
            return;
        }
        int p = arr[l];
        
        int i=l;
        int j=r;
        while(i < j){
            while(i < j && arr[j] >= p) {
                j--;
            }
            while(i < j && arr[i] <= p) {  //必須是小于等于,忽略第一個基準(zhǔn)數(shù)
                i++;
            }
            if(i<j){
                swap(arr, i,j);
            }
        }
        if(i != l){
            swap(arr, i, l);   //將基準(zhǔn)數(shù)p和位置i的數(shù)進(jìn)行交換,因為i這個位置的數(shù)是小于p的
            sort(arr, l, i-1);
        }
        sort(arr, i+1, r);
    }
    
    
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    
}

下面是數(shù)組的交換過程:

原始數(shù)組 [4,8,5,0,1,6,3]
交換:3,8
[4, 3, 5, 0, 1, 6, 8]
交換:1,5
[4, 3, 1, 0, 5, 6, 8]
基準(zhǔn)交換:4,0
[0, 3, 1, 4, 5, 6, 8]
交換:3,1
[0, 1, 3, 4, 5, 6, 8]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容