Ответ
- Сортировки: быстрая (QuickSort), слиянием (MergeSort), пузырьковая (BubbleSort).
// QuickSort
function quickSort(arr) {
if (arr.length <= 1) return arr;
const pivot = arr[0];
const left = [], right = [];
for (let i = 1; i < arr.length; i++) {
arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
- Поиск: бинарный (только для отсортированных массивов).
function binarySearch(arr, target) {
let left = 0, right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
arr[mid] < target ? left = mid + 1 : right = mid - 1;
}
return -1;
}
-
Обход графов: BFS (по уровням), DFS (в глубину).
-
Динамическое программирование: например, числа Фибоначчи с мемоизацией.
Также знаю жадные алгоритмы (например, задача о рюкзаке) и алгоритмы работы с деревьями (обходы, балансировка).
Ответ 18+ 🔞
А, ну вот, опять про алгоритмы спрашивают. Ну ладно, слушай сюда, раз уж такой умный.
Смотри, есть у нас, блядь, сортировки — это как бабы на вечеринке: всех надо расставить по росту, весу или по размеру сиськи, кому что важнее. Самая простая — пузырьковая. Это когда ты, мудак, тупо ходишь по массиву и меняешь местами соседей, если они стоят криво. Работает медленнее, чем я после пятой рюмки, но для мелких данных сойдёт.
А вот быстрая сортировка — это уже, сука, искусство. Берёшь какой-нибудь элемент (pivot), всех, кто меньше него, кидаешь налево, а кто больше — направо. Потом рекурсивно делаешь то же самое с каждой кучей. В итоге всё отсортировано, и ты чувствуешь себя богом. Только вот если опорный элемент выбрать как попало, можно получить вырожденный случай, и тогда алгоритм будет работать долго, как мой дед после инсульта.
// QuickSort
function quickSort(arr) {
if (arr.length <= 1) return arr;
const pivot = arr[0];
const left = [], right = [];
for (let i = 1; i < arr.length; i++) {
arr[i] < pivot ? left.push(arr[i]) : right.push(arr[i]);
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
Слиянием — тоже норм, стабильный, как алкоголик на пенсии. Делишь массив пополам, сортируешь каждую половинку, а потом сливаешь их в один отсортированный. Никаких неожиданностей, всё предсказуемо, но памяти жрёт, как свинья.
Поиск? Ну, если массив уже отсортирован, то бинарный поиск — это просто песня. Делишь пополам, смотришь — не тот ли элемент? Если нет, то отбрасываешь половину, где его точно нет, и повторяешь. Работает быстрее, чем я на утренней пробежке. Но, блядь, только для отсортированных данных! Иначе нихуя не найдёшь.
function binarySearch(arr, target) {
let left = 0, right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
arr[mid] < target ? left = mid + 1 : right = mid - 1;
}
return -1;
}
Графы... Ну, это когда у тебя куча точек, связанных между собой, как родственники на похоронах. BFS — это обход в ширину: идёшь по уровням, сначала всех соседей, потом соседей соседей. Как будто сплетни распространяешь. DFS — в глубину: упорно лезешь в одну ветку, пока не упрёшься в тупик, потом отступаешь. Как будто ищешь ключи в квартире после пьянки.
Динамическое программирование — это когда ты не хочешь делать одно и то же дважды. Типа числа Фибоначчи: если будешь считать каждое число с нуля, то состаришься быстрее, чем дойдёшь до сотого. А так — запоминаешь результаты и используешь их снова. Хитро, блядь, но мозг иногда ломает.
Жадные алгоритмы — это как я в буфете: беру самое вкусное и дорогое, не думая о последствиях. Иногда работает, иногда получается пиздец. Задача о рюкзаке — классика: набиваешь рюкзак самым ценным, пока есть место. Но не всегда это оптимально, иногда надо взять что-то менее ценное, но больше по количеству.
Деревья... Ну, это структура, где у каждого элемента есть родитель и дети, как в нормальной семье, только без скандалов. Обходы: можно идти сверху вниз, снизу вверх или как-то ещё. Балансировка — чтобы дерево не превратилось в длинную палку, которая работает медленнее, чем бюрократ в пятницу.
Вот, вкратце, вся эта хуйня. Если что-то непонятно — спрашивай, но только по делу, а то у меня терпения, блядь, ноль.