UNPKG

819 BPlain TextView Raw
1import cmp from './_cmp';
2import type {compareFn, mapFn} from './_types';
3
4function bubbleSortPair$<T, U=T>(x: T[], fc: compareFn<T|U>, m: (T|U)[]): T[] {
5 var X = x.length, diff = x!==m;
6 for(var i=0; i<X-1; i++) {
7 for(var j=i+1; j<X; j++) {
8 if(fc(m[i], m[j]) <= 0) continue;
9 if(true) { var t = x[i]; x[i] = x[j]; x[j] = t; }
10 if(diff) { var u = m[i]; m[i] = m[j]; m[j] = u; }
11 }
12 }
13 return x;
14}
15
16/**
17 * Arranges values in an order.
18 * @param x an array (updated)
19 * @param fc compare function (a, b)
20 * @param fm map function (v, i, x)
21 * @returns x
22 */
23function bubbleSort$<T, U=T>(x: T[], fc: compareFn<T|U>=null, fm: mapFn<T, T|U>=null): T[] {
24 var fc = fc||cmp;
25 if(fm) return bubbleSortPair$(x, fc, x.map(fm));
26 else return bubbleSortPair$(x, fc, x);
27}
28export default bubbleSort$;