Начало работы
Установка
npm install ts-dsУ пакета нет зависимостей. Он работает в Node.js 18+ и в любом сборщике, с ES-модулями и CommonJS.
Первая сортировка
import { quickSort } from 'ts-ds';
const numbers = [5, 2, 4, 6, 1, 3];
quickSort(numbers);
console.log(numbers); // [1, 2, 3, 4, 5, 6]Сортировка изменяет массив
Все функции сортировки сортируют массив на месте и ничего не возвращают (void). Это то же соглашение, что у list.sort() в Python или Arrays.sort() в Java: функция либо изменяет данные, либо возвращает результат, но не то и другое сразу (разделение команд и запросов).
const sorted = quickSort(numbers); // ошибка TypeScript: quickSort возвращает voidЧтобы сохранить исходный массив, отсортируйте копию:
const copy = [...numbers];
quickSort(copy);Свой порядок
Сортировки сравнением принимают необязательный компаратор — точно как Array.prototype.sort: он возвращает отрицательное число, если a идёт первым, положительное, если первым идёт b, и 0, если они равны.
import { mergeSort } from 'ts-ds';
const people = [
{ name: 'Анна', age: 30 },
{ name: 'Борис', age: 20 },
{ name: 'Ева', age: 30 },
];
mergeSort(people, (a, b) => a.age - b.age);
// Борис (20), Анна (30), Ева (30) — сортировка слиянием устойчива, Анна остаётся перед Евой
mergeSort(people, (a, b) => b.age - a.age); // по убываниюБез компаратора значения сортируются по возрастанию с помощью <. Строки сравниваются по кодам UTF-16 ('B' < 'a'); для алфавитного порядка используйте (a, b) => a.localeCompare(b). NaN оказывается в конце.
Способы импорта
import { quickSort, heapSort } from 'ts-ds'; // отдельные функции
import { sort } from 'ts-ds'; // все алгоритмы: sort.quick, sort.heap, …
import { quickSort } from 'ts-ds/sort'; // только сортировки
const { quickSort } = require('ts-ds'); // CommonJSПри именованном импорте сборщик выбросит алгоритмы, которые вы не используете. Объект sort удобен для экспериментов и сравнений, но всегда содержит все алгоритмы.
Что дальше
- Сортировки: обзор и сравнение — какой алгоритм выбрать и почему.
- Справочник API — все функции и типы (на английском).