serverless-spy
Version:
CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.
117 lines (90 loc) • 2.03 kB
JavaScript
/**
* Mnemonist Quick Sort
* =====================
*
* Quick sort related functions.
* Adapted from: https://alienryderflex.com/quicksort/
*/
var LOS = new Float64Array(64),
HIS = new Float64Array(64);
function inplaceQuickSort(array, lo, hi) {
var p, i, l, r, swap;
LOS[0] = lo;
HIS[0] = hi;
i = 0;
while (i >= 0) {
l = LOS[i];
r = HIS[i] - 1;
if (l < r) {
p = array[l];
while (l < r) {
while (array[r] >= p && l < r)
r--;
if (l < r)
array[l++] = array[r];
while (array[l] <= p && l < r)
l++;
if (l < r)
array[r--] = array[l];
}
array[l] = p;
LOS[i + 1] = l + 1;
HIS[i + 1] = HIS[i];
HIS[i++] = l;
if (HIS[i] - LOS[i] > HIS[i - 1] - LOS[i - 1]) {
swap = LOS[i];
LOS[i] = LOS[i - 1];
LOS[i - 1] = swap;
swap = HIS[i];
HIS[i] = HIS[i - 1];
HIS[i - 1] = swap;
}
}
else {
i--;
}
}
return array;
}
exports.inplaceQuickSort = inplaceQuickSort;
function inplaceQuickSortIndices(array, indices, lo, hi) {
var p, i, l, r, t, swap;
LOS[0] = lo;
HIS[0] = hi;
i = 0;
while (i >= 0) {
l = LOS[i];
r = HIS[i] - 1;
if (l < r) {
t = indices[l];
p = array[t];
while (l < r) {
while (array[indices[r]] >= p && l < r)
r--;
if (l < r)
indices[l++] = indices[r];
while (array[indices[l]] <= p && l < r)
l++;
if (l < r)
indices[r--] = indices[l];
}
indices[l] = t;
LOS[i + 1] = l + 1;
HIS[i + 1] = HIS[i];
HIS[i++] = l;
if (HIS[i] - LOS[i] > HIS[i - 1] - LOS[i - 1]) {
swap = LOS[i];
LOS[i] = LOS[i - 1];
LOS[i - 1] = swap;
swap = HIS[i];
HIS[i] = HIS[i - 1];
HIS[i - 1] = swap;
}
}
else {
i--;
}
}
return indices;
}
exports.inplaceQuickSortIndices = inplaceQuickSortIndices;