1.9.0 javascript快速排序(quickSort)

1.9.1 快速排序

顧名思義快速排序聽起來雖然有點像概念性的東西,但是名字就代表了它本身。設想一個這樣的場景:如果在你面前有一羣剛出生不久生病的小狗狗,都有自己的掛號單,現在給你的任務就是按照單號給小狗排序,因爲時間問題,所以要去無論什麼辦法,只要最快就行。這個時候也許快速排序能幫上你的忙!

1.9.2 核心

  • 在排序之前選擇一個值爲遊標(中間值)
  • 所有小於遊標的放在左側,大於遊標的放在右側
  • 左右兩邊分開的數據不斷重複第一步、第二步,
    直到裏面只有一個值爲止

假設剛剛狗狗的單號是這樣子的

  1. 第一步選擇8作爲中間值(選擇任何值都行,中間比較容易明白)
    在這裏插入圖片描述
  2. 所有小於8的放在左側,大於8的放在右側
    在這裏插入圖片描述
  3. 左右兩邊分開的數據不斷重複第一步、第二步,直到裏面只有一個值爲止
    在這裏插入圖片描述

在這裏插入圖片描述

1.9.3 使用javascript實現

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
</body>
<script>
    const AR = {
        arr: [3, 4, 6, 1, 2, 0, 8, 9, 5, 7, 22, 88, 23],
        //快速排序
        quickSort(arr) {
            //直到分爲單個時返回當前排好序的數組
            if (arr.length <= 1) return arr;
            // 獲取前數組的中間值下標
            const cursor = Math.floor(arr.length / 2);
            // 獲取數組的中間值
            const [crrent, ] = arr.splice(cursor, 1);
            // 左邊的數組
            const leftArr = [];
            // 右邊的數組
            const rightArr = [];
            // 以中間值爲遊標大的放右邊小的放左邊
            arr.forEach(e => {
                if (e < crrent) {
                    leftArr.push(e)
                } else {
                    rightArr.push(e)
                }
            });
            // 遞歸重複這個步驟最後就可以得到排好序的數組
            return AR.quickSort(leftArr).concat([crrent], AR.quickSort(rightArr))
        },
    }
    console.dir(AR.quickSort(AR.arr));
</script>

</html>

使用的時候直接調用就行了
在這裏插入圖片描述

1.9.4 快速排序思維導圖

在這裏插入圖片描述

小狗很快就拍好序了:)好吧,你可能會受不了,可能會狗帶,畢竟和電腦比不了,具體情況具體分析,當數據量很大的時候。這種方式是最爲廣泛也是最快的。

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