一圖解析JavaScript快速排序原理,看了就不會忘~~

今天有個朋友問快速排序的原理,用processon給他畫了一個圖,也順手貼上來,給需要的朋友使用。

快排的核心原理是:

1,選數組中的中間數據爲比較的基數 (其實選哪個都可以,選第一個或者最後一個都行)

2,從頭開始遍歷數組,跟選出來的中間數進行比較,比中間數小的放左邊數組,大的放右邊數組

3,此時得到leftArr數組、中間元素、右邊數組

4,分別對左邊數組執行步驟1~3,直到拆不出數組位置。

5,最後會把拆出來的元素都連起來。

 

直接上一個流程圖,希望一圖能勝千言哈:

直接擼代碼(Javascript):

var originalArr = [12,23,16,14,12,21,7];

function quickSort(arr) {
    // 只有一個元素的時候就不用排了,直接返回,需要一直拆解到只有一個元素
    if(arr.length<=1){
        return arr;
    }
    // 拿到中間元素
    const middleIndex = Math.floor(arr.length/2); 
    const middleValue  = arr.splice(middleIndex,1)[0]; // 把計劃做中間數據的元素拿出來
    let left = [];
    let right = [];
    // 跟別跟中間元素進行大小比較
    for(let i=0;i<arr.length;i++){
        if(arr[i]<=middleValue){
            left.push(arr[i]);
        }else{
            right.push(arr[i]);
        }
    }
    // 這一步是關鍵,需要遞歸的處理
    return quickSort(left).concat(middleValue,quickSort(right));
}

let newArr = quickSort( [...originalArr] );
console.log(`quickSort end, newArr = ${JSON.stringify(newArr)}`);

// 結果: quickSort end, newArr = [7,12,12,14,16,21,23]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章