mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 15:39:42 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
44 lines
1015 B
JavaScript
44 lines
1015 B
JavaScript
/*
|
|
* Radix sorts an integer array without comparing the integers.
|
|
* It groups the integers by their digits which share the same
|
|
* significant position.
|
|
* For more information see: https://en.wikipedia.org/wiki/Radix_sort
|
|
*/
|
|
export function radixSort(items, RADIX) {
|
|
// default radix is then because we usually count to base 10
|
|
if (RADIX === undefined || RADIX < 1) {
|
|
RADIX = 10
|
|
}
|
|
|
|
let maxLength = false
|
|
let placement = 1
|
|
|
|
while (!maxLength) {
|
|
maxLength = true
|
|
const buckets = []
|
|
|
|
for (let i = 0; i < RADIX; i++) {
|
|
buckets.push([])
|
|
}
|
|
|
|
for (let j = 0; j < items.length; j++) {
|
|
const tmp = items[j] / placement
|
|
buckets[Math.floor(tmp % RADIX)].push(items[j])
|
|
if (maxLength && tmp > 0) {
|
|
maxLength = false
|
|
}
|
|
}
|
|
|
|
let a = 0
|
|
for (let b = 0; b < RADIX; b++) {
|
|
const buck = buckets[b]
|
|
for (let k = 0; k < buck.length; k++) {
|
|
items[a] = buck[k]
|
|
a++
|
|
}
|
|
}
|
|
placement *= RADIX
|
|
}
|
|
return items
|
|
}
|