UNPKG

@extra-array/selection-sort

Version:
59 lines (54 loc) 1.27 kB
'use strict'; /** * Compares two values. * @param a a value * @param b another value * @returns a<b: -1, a=b: 0, a>b: 1 */ function cmp(a, b) { return a < b ? -1 : (a > b ? 1 : 0); } function selectionSortPair$(x, fc, m) { var X = x.length, diff = x !== m; for (var i = 0; i < X - 1; i++) { var l = i; for (var j = i + 1; j < X; j++) if (fc(m[l], m[j]) > 0) l = j; { var t = x[i]; x[i] = x[l]; x[l] = t; } if (diff) { var u = m[i]; m[i] = m[l]; m[l] = u; } } return x; } /** * Arranges values in an order. * @param x an array (updated) * @param fc compare function (a, b) * @param fm map function (v, i, x) * @returns x */ function selectionSort$(x, fc = null, fm = null) { var fc = fc || cmp; if (fm) return selectionSortPair$(x, fc, x.map(fm)); else return selectionSortPair$(x, fc, x); } /** * Arranges values in an order. * @param x an array * @param fc compare function (a, b) * @param fm map function (v, i, x) */ function selectionSort(x, fc = null, fm = null) { return selectionSort$(x.slice(), fc, fm); } module.exports = selectionSort;