Skip to content

Commit 61d69ff

Browse files
committed
Add quickselect javascript
1 parent 677ce59 commit 61d69ff

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
//Source: https://stackoverflow.com/questions/38988384/quickselect-into-javascript
2+
function swap(array, idxA, idxB) {
3+
var temp = array[idxA]
4+
array[idxA] = array[idxB]
5+
array[idxB] = temp
6+
}
7+
8+
function partitionStart(arr, left, right) {
9+
var pivotIdx = Math.floor(Math.random() * (right - left + 1)) + left;
10+
var storeIdx = left, pivotVal = arr[pivotIdx]
11+
for (var i = left; i <= right; i++) {
12+
if (arr[i] < pivotVal) {
13+
swap(arr, storeIdx, i)
14+
storeIdx++
15+
}
16+
}
17+
return storeIdx;
18+
}
19+
20+
function quickSelectLoop(arr, k) {
21+
var pivotDist;
22+
var left = 0, right = arr.length - 1;
23+
while(right !== left) {
24+
pivotDist = partitionStart(arr, left, right)
25+
26+
if (k < pivotDist) {
27+
right = pivotDist - 1;
28+
} else {
29+
left = pivotDist;
30+
}
31+
}
32+
return arr[k]
33+
}
34+
35+
//Test
36+
37+
38+
var test2 = [87,32,55,23,389,123,555,657,12378, 12312,3332]
39+
var tmp = [].concat(test2)
40+
41+
tmp.sort(function(a,b) { return a==b ? 0: (a< b? -1: 1)});
42+
43+
for(var x=0;x<test2.length;x++) {
44+
console.log(quickSelectLoop([].concat(test2), x), tmp[x])
45+
}

0 commit comments

Comments
 (0)