Shorter stableSort example and test
This commit is contained in:
@ -14,40 +14,7 @@ const stableSort = (arr, compare) =>
|
|||||||
```
|
```
|
||||||
|
|
||||||
```js
|
```js
|
||||||
// sorted by weight
|
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
||||||
const input = [
|
const stable = stableSort(arr, () => 0); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||||
{ height: 100, weight: 80 },
|
const unstable = [...arr].sort(() => 0); // [5, 0, 2, 3, 4, 1, 6, 7, 8, 9, 10] (in Chrome/NodeJS)
|
||||||
{ height: 90, weight: 90 },
|
```
|
||||||
{ height: 70, weight: 95 },
|
|
||||||
{ height: 100, weight: 100 },
|
|
||||||
{ height: 80, weight: 110 },
|
|
||||||
{ height: 110, weight: 115 },
|
|
||||||
{ height: 100, weight: 120 },
|
|
||||||
{ height: 70, weight: 125 },
|
|
||||||
{ height: 70, weight: 130 },
|
|
||||||
{ height: 100, weight: 135 },
|
|
||||||
{ height: 75, weight: 140 },
|
|
||||||
{ height: 70, weight: 140 }
|
|
||||||
];
|
|
||||||
|
|
||||||
// sort by height
|
|
||||||
stableSort(input, (a, b) => a.height - b.height);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Items with the same height are still sorted by weight
|
|
||||||
which means they preserved their relative order.
|
|
||||||
[
|
|
||||||
{ height: 70, weight: 95 },
|
|
||||||
{ height: 70, weight: 125 },
|
|
||||||
{ height: 70, weight: 130 },
|
|
||||||
{ height: 70, weight: 140 },
|
|
||||||
{ height: 75, weight: 140 },
|
|
||||||
{ height: 80, weight: 110 },
|
|
||||||
{ height: 90, weight: 90 },
|
|
||||||
{ height: 100, weight: 80 },
|
|
||||||
{ height: 100, weight: 100 },
|
|
||||||
{ height: 100, weight: 120 },
|
|
||||||
{ height: 100, weight: 135 },
|
|
||||||
{ height: 110, weight: 115 }
|
|
||||||
]
|
|
||||||
*/
|
|
||||||
|
|||||||
@ -10,44 +10,12 @@ test('Testing stableSort', (t) => {
|
|||||||
//t.false(stableSort(args..), 'Expected');
|
//t.false(stableSort(args..), 'Expected');
|
||||||
//t.throws(stableSort(args..), 'Expected');
|
//t.throws(stableSort(args..), 'Expected');
|
||||||
|
|
||||||
// sorted by weight
|
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
||||||
const input = [
|
const compare = () => 0;
|
||||||
{ height: 100, weight: 80 },
|
|
||||||
{ height: 90, weight: 90 },
|
|
||||||
{ height: 70, weight: 95 },
|
|
||||||
{ height: 100, weight: 100 },
|
|
||||||
{ height: 80, weight: 110 },
|
|
||||||
{ height: 110, weight: 115 },
|
|
||||||
{ height: 100, weight: 120 },
|
|
||||||
{ height: 70, weight: 125 },
|
|
||||||
{ height: 70, weight: 130 },
|
|
||||||
{ height: 100, weight: 135 },
|
|
||||||
{ height: 75, weight: 140 },
|
|
||||||
{ height: 70, weight: 140 }
|
|
||||||
]
|
|
||||||
|
|
||||||
// sorted by height (using stableSort)
|
|
||||||
const target = [
|
|
||||||
{ height: 70, weight: 95 },
|
|
||||||
{ height: 70, weight: 125 },
|
|
||||||
{ height: 70, weight: 130 },
|
|
||||||
{ height: 70, weight: 140 },
|
|
||||||
{ height: 75, weight: 140 },
|
|
||||||
{ height: 80, weight: 110 },
|
|
||||||
{ height: 90, weight: 90 },
|
|
||||||
{ height: 100, weight: 80 },
|
|
||||||
{ height: 100, weight: 100 },
|
|
||||||
{ height: 100, weight: 120 },
|
|
||||||
{ height: 100, weight: 135 },
|
|
||||||
{ height: 110, weight: 115 }
|
|
||||||
]
|
|
||||||
|
|
||||||
const compare = (a, b) => a.height - b.height;
|
|
||||||
|
|
||||||
// stable
|
// stable
|
||||||
t.deepEqual(stableSort(input, compare), target);
|
t.deepEqual(stableSort(arr, compare), arr);
|
||||||
// unstable
|
// unstable
|
||||||
t.notDeepEqual(input.sort(compare), target);
|
t.notDeepEqual([...arr].sort(compare), arr);
|
||||||
|
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user