/
erioxis
/
web-nodejs
Обзор
Документация
Войти
/
erioxis
/
web-nodejs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/node_modules/mnemonist/sort/quick.js
116 строк
2 KB
erioxis
lab11fix
15 дек 2025, 23:21
15 дек 2025, 23:21
70dc7ba
Код
Авторство
О чём код?
/** * Mnemonist Quick Sort * ===================== * * Quick sort related functions. * Adapted from: https://alienryderflex.com/quicksort/ */ var LOS = new Float64Array(64), HIS = new Float64Array(64); function inplaceQuickSort(array, lo, hi) { var p, i, l, r, swap; LOS[0] = lo; HIS[0] = hi; i = 0; while (i >= 0) { l = LOS[i]; r = HIS[i] - 1; if (l < r) { p = array[l]; while (l < r) { while (array[r] >= p && l < r) r--; if (l < r) array[l++] = array[r]; while (array[l] <= p && l < r) l++; if (l < r) array[r--] = array[l]; } array[l] = p; LOS[i + 1] = l + 1; HIS[i + 1] = HIS[i]; HIS[i++] = l; if (HIS[i] - LOS[i] > HIS[i - 1] - LOS[i - 1]) { swap = LOS[i]; LOS[i] = LOS[i - 1]; LOS[i - 1] = swap; swap = HIS[i]; HIS[i] = HIS[i - 1]; HIS[i - 1] = swap; } } else { i--; } } return array; } exports.inplaceQuickSort = inplaceQuickSort; function inplaceQuickSortIndices(array, indices, lo, hi) { var p, i, l, r, t, swap; LOS[0] = lo; HIS[0] = hi; i = 0; while (i >= 0) { l = LOS[i]; r = HIS[i] - 1; if (l < r) { t = indices[l]; p = array[t]; while (l < r) { while (array[indices[r]] >= p && l < r) r--; if (l < r) indices[l++] = indices[r]; while (array[indices[l]] <= p && l < r) l++; if (l < r) indices[r--] = indices[l]; } indices[l] = t; LOS[i + 1] = l + 1; HIS[i + 1] = HIS[i]; HIS[i++] = l; if (HIS[i] - LOS[i] > HIS[i - 1] - LOS[i - 1]) { swap = LOS[i]; LOS[i] = LOS[i - 1]; LOS[i - 1] = swap; swap = HIS[i]; HIS[i] = HIS[i - 1]; HIS[i - 1] = swap; } } else { i--; } } return indices; } exports.inplaceQuickSortIndices = inplaceQuickSortIndices;