1 | import cmp from './_cmp';
|
2 | import type {compareFn, mapFn} from './_types';
|
3 |
|
4 | function 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 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | function 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 | }
|
28 | export default bubbleSort$;
|