| 132 | }; |
| 133 | |
| 134 | var quickSelect = function (points, k) { |
| 135 | let left = 0, |
| 136 | right = points.length - 1; |
| 137 | let pivotIndex = points.length; |
| 138 | while (pivotIndex !== k) { |
| 139 | // Repeatedly partition the array |
| 140 | // while narrowing in on the kth element |
| 141 | pivotIndex = partition(points, left, right); |
| 142 | if (pivotIndex < k) { |
| 143 | left = pivotIndex; |
| 144 | } else { |
| 145 | right = pivotIndex - 1; |
| 146 | } |
| 147 | } |
| 148 | |
| 149 | // Return the first k elements of the partially sorted array |
| 150 | return points.slice(0, k); |
| 151 | }; |
| 152 | |
| 153 | var partition = function (points, left, right) { |
| 154 | let pivot = choosePivot(points, left, right); |