快速排序

快速排序就是在數組中選擇一個數temp作爲基準,每次排完之後比temp大的在其右邊,比temp小的在其左邊。

有如下數組 A = [3, 6, 8, 2, 7, 5];

1、 首先從右向左移動
在這裏插入圖片描述

2、當右指針移動到2的時候,2比3小,停止移動

在這裏插入圖片描述

3、從左往右移動左指針,到6時,6比3大,停止移動

在這裏插入圖片描述

4、交換數據,交換6和2的位置

在這裏插入圖片描述

5、再次把右指針從右往左移動,到2時,因爲2比3小,停止移動,此時左指針右指針相遇,本次循環結束

在這裏插入圖片描述

6、 交換3(temp)與2的位置,本次排序後的順序如下

在這裏插入圖片描述

以上是經歷過一次循環排序的結構,3的左邊只有2, 右邊8、6、7、5均比3大,再把左右兩邊的數據進行排序,依次遞歸下去。

下面是代碼

function QuickSort(arr, begin, end) {
    if (begin >= end) {
        return;
    }

     let l = begin;
     let r = end;

     let flag = arr[begin];

     while( l < r) {
         while(arr[r] >= flag && r > l) {
            r--;
         }

         while(arr[l] <= flag && l < r) {
            l++;
         }

         [arr[l], arr[r]] = [arr[r], arr[l]];
     }
     [arr[l], arr[begin]] = [arr[begin], arr[l]];
     QuickSort(arr, begin, l - 1);
     QuickSort(arr, l + 1, end);
}

var  a = [3, 6, 8, 2, 7,5];
QuickSort(a, 0, a.length - 1);
console.log(a);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章