-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathquicksort.js
40 lines (29 loc) · 891 Bytes
/
quicksort.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
(function(){
function quicksort(arr, li=0, ri=(arr.length - 1)) {
var mi = partition(arr, li, ri);
if (li < mi - 1) quicksort(arr, li, mi - 1);
if (ri > mi) quicksort(arr, mi, ri);
return arr;
}
function partition(arr, li, ri) {
var pivot = arr[(li + ri) >> 1];
while(li <= ri) {
while(arr[li] < pivot) li++;
while(arr[ri] > pivot) ri--;
if (li <= ri) swap(arr, li++, ri--);
}
return li;
}
function swqp(arr, li, ri) {
[arr[li], arr[ri]] = [arr[ri], arr[li]];
}
var root = this;
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = quicksort;
}
exports.quicksort = quicksort;
} else {
root.quicksort = quicksort;
}
})();