1 | import cmp from './_cmp';
|
2 | import type {compareFn, mapFn} from './_types';
|
3 |
|
4 | function insertionSortPair$<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=X-2; i>=0; i--) {
|
7 | var xv = x[i], mv = m[i];
|
8 | for(var j=i+1; j<X; j++) {
|
9 | if(fc(mv, m[j]) <= 0) break;
|
10 | if(true) x[j-1] = x[j];
|
11 | if(diff) m[j-1] = m[j];
|
12 | }
|
13 | if(true) x[j-1] = xv;
|
14 | if(diff) m[j-1] = mv;
|
15 | }
|
16 | return x;
|
17 | }
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 | function insertionSort$<T, U=T>(x: T[], fc: compareFn<T|U>=null, fm: mapFn<T, T|U>=null): T[] {
|
27 | var fc = fc||cmp;
|
28 | if(fm) return insertionSortPair$(x, fc, x.map(fm));
|
29 | else return insertionSortPair$(x, fc, x);
|
30 | }
|
31 | export default insertionSort$;
|