通過JS實現快速排序

2021-10-03 02:38:57 字數 2237 閱讀 7938

快速排序基本思路:

以下是快速排序的兩種方式:

第一種常規的快速排序(效率更高)

步驟如下:

取第乙個數 15 為基準,再分別以陣列第一位和最後一位確立兩個哨兵 i 和 j。此時 i = 0,j = 9,先 j-- 從後往前找小於基準的數,然後 i++ 從前往後找大於基準的數。

[15,3,83,10,18,99,4,63,28,47]

此時 i = 2,j = 6,83 > 15,4 < 15, arr[2] 與 arr[6] 交換。然後繼續上一步的做法。

[15,3,4,10,18,99,83,63,28,47]

當 j = 3 時,10 < 15,j-- 找到小於基準的數,i++ 只能向右走到 i = 3,兩哨兵相遇,則基準數和 arr[3] 交換位置,第一趟排序完成。

[10,3,4,15,18,99,83,63,28,47]

此時以 arr[3] = 15 為界分為左右兩個子陣列。左邊的子陣列都比15小,右邊的子陣列都比15大。

接著在左右兩個子陣列中重複上面的排序過程,直到每個子陣列的長度為1,排序結束!

注意**中的注釋,一定要哨兵 j 先動!

function

quicksort

(arr,

from

,to)

while

(i < j)

while

(arr[i]

<= pivot && i < j)

if(i < j)

} arr[

from

]= arr[i]

arr[i]

= pivot;

quicksort

(arr,

from

,i-1);

quicksort

(arr,i+

1,to)

;return arr;

}var arr =[15

,3,83

,10,18

,99,4

,63,28

,47];

quicksort

(arr,

0,arr.length-1)

;

第二種快速排序(效率低於第一種)

步驟如下:

取第乙個數 15 為基準,再分別以陣列第一位和最後一位確立兩個哨兵 i 和 j。此時 i = 0, j = 9,i 先不變,j-- 從後往前找小於基準的數。

[15,3,83,10,18,99,4,63,28,47]

i = 0, j = 6 時,4 < 15,arr[0] 換成 4。接著調換順序從前往後找比基準大的數(i++,j 不變)。

[4,3,83,10,18,99,4,63,28,47]

i = 2 ,j = 6 時 ,83 > 15,arr[6] 換成 83。接著調換順序從後往前找比基準小的數。

[4,3,83,10,18,99,83,63,28,47]

i = 2,j = 3 時,10 < 15,arr[2] 換成 10。反向查詢。

[4,3,10,10,18,99,83,63,28,47]

當i = j = 3 時,兩哨兵相遇,則把 arr[3] 換成基準數15,第一趟排序完成。

[4,3,10,15,18,99,83,63,28,47]

此時以 arr[3] = 15 為界分為左右兩個子陣列。左邊的子陣列都比15小,右邊的子陣列都比15大。

接著在左右兩個子陣列中重複上面的排序過程,直到每個子陣列的長度為1,排序結束!

function

quicksort

(arr, i, j)

if(i < j)

while

(arr[i]

<= pivot && i < j)

if(i < j)

} arr[i]

= pivot;

quicksort

(arr, left, i-1)

;quicksort

(arr, i+

1, right)

;return arr;}}

var arr=[15

,3,83

,10,18

,99,4

,63,28

,47];

quicksort

(arr,

0, arr.length-1)

;

js實現快速排序

快排思想 1 在資料集之中,選擇乙個元素作為 基準 pivot 2 所有小於 基準 的元素,都移到 基準 的左邊 所有大於 基準 的元素,都移到 基準 的右邊。var quicksort function arr var pivotindex math.floor arr.length 2 var ...

js實現快速排序

快速排序主要用到的是遞迴和分治的思想當資料量比較大時,快排無疑是最好的選擇。對於公升序來講,大體思路是,首先我們定義左邊指標為i,最右邊為j,然後選最左邊的數字作為參照,然後從右邊往左邊搜尋,直到找到比參照數小的,然後將這個數字賦給i指標所在位置,再從左往右搜尋直到找到比參照大的,然後將這個數賦給j...

js實現快速排序

var quicksort function arr var pivotindex math.floor arr.length 2 取基準點 var pivot arr.splice pivotindex,1 0 取基準點的值,splice index,1 函式可以返回陣列中被刪除的那個數 var ...