File tree 1 file changed +46
-0
lines changed
1 file changed +46
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments