radix sort using javascript
parent
6f19b452ea
commit
e29466aab9
|
@ -0,0 +1,44 @@
|
||||||
|
const countingSortNegative = (arr, n, place) => {
|
||||||
|
let max = Math.max(...arr);
|
||||||
|
let min = Math.min(...arr);
|
||||||
|
let range = max - min + 1;
|
||||||
|
let count = new Array(range).fill(0);
|
||||||
|
let output = new Array(n).fill(0);
|
||||||
|
|
||||||
|
//Store the frequency
|
||||||
|
for (let i = 0; i < n; i++) {
|
||||||
|
const num = Math.floor(arr[i] / place) % 10;
|
||||||
|
count[num - min]++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Accumulate the frequency
|
||||||
|
for (let i = 1; i < count.length; i++) {
|
||||||
|
count[i] += count[i - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
//Sort based on frequency
|
||||||
|
for (let i = n - 1; i >= 0; i--) {
|
||||||
|
const num = Math.floor(arr[i] / place) % 10;
|
||||||
|
output[count[num - min] - 1] = arr[i];
|
||||||
|
count[num - min]--;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Copy the output array
|
||||||
|
for (let i = 0; i < n; i++){
|
||||||
|
arr[i] = output[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const radixSort = (arr, size = arr.length) => {
|
||||||
|
//Get the max element
|
||||||
|
let max = Math.max(...arr);
|
||||||
|
|
||||||
|
//Sort the array using counting sort
|
||||||
|
for(let i = 1; parseInt(max / i) > 0; i *= 10){
|
||||||
|
countingSortNegative(arr, size, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const arr = [121, -432, 564, 23, -1, 45, 788];
|
||||||
|
radixSort(arr);
|
||||||
|
console.log(arr);
|
Loading…
Reference in New Issue