Skip to content

Начало работы ​

Установка ​

bash
npm install ts-ds

У пакета нет зависимостей. Он работает в Node.js 18+ и в любом сборщике, с ES-модулями и CommonJS.

Первая сортировка ​

ts
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: функция либо изменяет данные, либо возвращает результат, но не то и другое сразу (разделение команд и запросов).

ts
const sorted = quickSort(numbers); // ошибка TypeScript: quickSort возвращает void

Чтобы сохранить исходный массив, отсортируйте копию:

ts
const copy = [...numbers];
quickSort(copy);

Свой порядок ​

Сортировки сравнением принимают необязательный компаратор — точно как Array.prototype.sort: он возвращает отрицательное число, если a идёт первым, положительное, если первым идёт b, и 0, если они равны.

ts
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 оказывается в конце.

Способы импорта ​

ts
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 удобен для экспериментов и сравнений, но всегда содержит все алгоритмы.

Что дальше ​

MIT License