'use strict' module.exports = findMedian var genPartition = require('./partition') var partitionStartLessThan = genPartition('lostart && boxes[ptr+axis] > x; --j, ptr-=elemSize) { //Swap var aPtr = ptr var bPtr = ptr+elemSize for(var k=0; k>> 1) var elemSize = 2*d var pivot = mid var value = boxes[elemSize*mid+axis] while(lo < hi) { if(hi - lo < PARTITION_THRESHOLD) { insertionSort(d, axis, lo, hi, boxes, ids) value = boxes[elemSize*mid+axis] break } //Select pivot using median-of-3 var count = hi - lo var pivot0 = (Math.random()*count+lo)|0 var value0 = boxes[elemSize*pivot0 + axis] var pivot1 = (Math.random()*count+lo)|0 var value1 = boxes[elemSize*pivot1 + axis] var pivot2 = (Math.random()*count+lo)|0 var value2 = boxes[elemSize*pivot2 + axis] if(value0 <= value1) { if(value2 >= value1) { pivot = pivot1 value = value1 } else if(value0 >= value2) { pivot = pivot0 value = value0 } else { pivot = pivot2 value = value2 } } else { if(value1 >= value2) { pivot = pivot1 value = value1 } else if(value2 >= value0) { pivot = pivot0 value = value0 } else { pivot = pivot2 value = value2 } } //Swap pivot to end of array var aPtr = elemSize * (hi-1) var bPtr = elemSize * pivot for(var i=0; i