快速排序

  1. 原理
    (1)從一個(gè)數(shù)列中選出一個(gè)「基準(zhǔn)」
    (2)然后遍歷所有元素,把所有比這個(gè)「基準(zhǔn)」小的元素放在「基準(zhǔn)」的左邊,所有比「基準(zhǔn)」大的元素放在「基準(zhǔn)」的右邊,如果與「基準(zhǔn)」相等,隨意放哪邊。一輪分區(qū)下來(lái),這樣會(huì)是該「基礎(chǔ)」處于整個(gè)數(shù)列的中間位置。
    (3)遞歸地,把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序。
    (4)遞歸到最底部時(shí),數(shù)列的長(zhǎng)度只有0或者1,即本身就是排好序的。這個(gè)算法一定會(huì)結(jié)束,因?yàn)樵诿看蔚牡?,它至少?huì)把一個(gè)元素?cái)[到它最后的位置去。

  2. 代碼

function quickSort(arr) {
    function __quickSort__(arr, start, end) {
        if(start >= end) return;
        let key = arr[end];
        let left = start;
        let right = end - 1;
        while(left < right){
            while( arr[left] < key && left < right) left++;
            while( arr[right] > key && left < right) right--;
            [arr[left], arr[right]] = [arr[right], arr[left]];
        }
        if(arr[left] >= key) {
            [arr[left], arr[end]] = [arr[end], arr[left]];
        } else {
            left++;
        }
        __quickSort__(arr, start, left - 1);
        __quickSort__(arr, left + 1, end);
    }
    __quickSort__(arr, 0, arr.length - 1 );
    return arr;
}
  • 本代碼,以最后一個(gè)數(shù)為「基準(zhǔn)」(key值)
  • 從數(shù)列首位開(kāi)始遍歷,如果遇到比key小的數(shù),則繼續(xù)向后掃描,直到遇到比key值大的元素,然后從key值前一個(gè)元素開(kāi)始從后向前掃描,直到遇到比key值小的元素
  • 此時(shí)交換位置停止的兩個(gè)元素
  • 繼續(xù)上面的邏輯
  • 直到left和right相遇
  • 如果相遇時(shí)的值大于或者等于key值,則把該相遇的值與key值互換位置
  • 如果相遇時(shí)的值小于key值,則把left后移一位。

參考:https://zhuanlan.zhihu.com/p/46189099

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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