快排

以前圖廣度,學的知識不過腦子。重學下快排。記錄下學習歷程!bash

一遍寫下來雖然花了很多時間,但感受對爲於一些模糊的問題都有了比較深入的認識,好比爲何快排是不穩定的學習

告別不愛動手的壞毛病ui

const arr = [45, 10, 11, 88, 34, 90]

// const quickSort = arr => {
//     if (arr.length < 2) return arr
//     const spliceItem = arr.splice(0, 1)
//     const leftPointArr = []
//     const rightPointArr = []
//     arr.forEach(item => {
//         if (item >= spliceItem) rightPointArr.push(item)
//         else leftPointArr.push(item)
//     });
//     return leftPointArr.concat(spliceItem, rightPointArr);
// }


const quickSort = (arr, left = 0, right = arr.length - 1) => {
    const pivot = arr[Math.ceil((left + right)/ 2 )]   //中間值爲基準值
    let leftPoint = left
    let rightPoint = right
    let index
    if (left < right) {
        while (leftPoint < rightPoint) {
            while(arr[rightPoint] > pivot) {
                rightPoint--
            }
            while(arr[leftPoint] < pivot) {
                leftPoint++
            }
            [arr[leftPoint], arr[rightPoint]] = [arr[rightPoint], arr[leftPoint]]
        }
        index = leftPoint
        quickSort(arr, left, index - 1)
        quickSort(arr, index + 1, right)
    }
    return arr
}

console.log(quickSort(arr))
複製代碼
相關文章
相關標籤/搜索