Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 021b605

Browse files
committed
feat: 快速排序
1 parent 1824b4c commit 021b605

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

排序/快速排序.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
const swap = require("../工具/交换");
2+
3+
/**
4+
*
5+
* @param {number[]} arr
6+
*/
7+
function quickSort(arr) {
8+
_quickSort(arr, 0, n - 1);
9+
}
10+
11+
/**
12+
* 对 arr[l...r] 部分进行快速排序
13+
* @param {number[]} arr
14+
* @param {number} l 左边界
15+
* @param {number} r 右边界
16+
*/
17+
function _quickSort(arr, l, r) {
18+
if (l >= r) {
19+
return;
20+
}
21+
let p = partition(arr, l, r);
22+
__quickSort(arr, l, p - 1);
23+
__quickSort(arr, p + 1, r);
24+
}
25+
26+
/**
27+
* 对 arr[l...r] 部分进行快速排序
28+
* @param {number[]} arr
29+
* @param {number} l 左边界
30+
* @param {number} r 右边界
31+
* @returns {number} 返回索引值p,使得arr[l...p-1] < arr[p] < arr[p+1...r]
32+
*/
33+
function partition(arr, l, r) {
34+
// 取一个基准值 取第一项
35+
let v = arr[l];
36+
37+
// arr[l+1...j] < v; arr[j+1...i) > v
38+
let j = l;
39+
for (let i = l + 1; i <= r; i++) {
40+
if (arr[i] < v) {
41+
// 如果当前值小于基准值的话,就交换到j + 1后的位置去。
42+
swap(arr, j + 1, i);
43+
j++;
44+
}
45+
}
46+
}

0 commit comments

Comments
 (0)