快速排序就是在數組中選擇一個數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);