1
0
mirror of https://gitee.com/coder-xiaomo/algorithm-visualization synced 2025-01-10 19:58:18 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee

实现 基数排序算法(不要合分支);动画展示不好展示

This commit is contained in:
kevinbzhang 2022-08-08 16:33:49 +08:00
parent 7c62e215c5
commit 5d6d7096e6
2 changed files with 44 additions and 3 deletions

View File

@ -507,7 +507,7 @@ class CountingSort extends Sort {
* 基数排序算法 Radix Sort v0.1.0
*
* @author coder-xiaomo
* @date 2022-05-19
* @date 2022-08-08
*/
class RadixSort extends Sort {
@ -530,8 +530,48 @@ class RadixSort extends Sort {
sort(array) {
if (array.length == 0)
return array
// todo
console.log("尚未实现")
// refer: https://segmentfault.com/a/1190000021342923
// 取最大值 最大值的位数就是要循环遍历的次数
const max = Math.max(...array);
// 定义一个桶
const buckets = Array.from({ length: 10 }, () => []);
// 定义当前要遍历的位数 个位 十位 百位...
let m = 1;
while (m < max) {
// m < 最大值
// 下方m要 m*=10 -> 每次遍历增加一位
// 保证遍历完所有可能的位数
// 放入桶
array.forEach(number => {
// digit表示某位数的值
const digit = ~~((number % (m * 10)) / m);
// 把该位数的值放到桶buckets中
// 通过索引确定顺序 类比计数排序
buckets[digit].push(number);
});
// 从桶buckets中取值
// 完成此步后 就完成了一次位数排序
let ind = 0;
buckets.forEach(bucket => {
while (bucket.length > 0) {
// shift从头部取值
// 保证按照队列先入先出
array[ind++] = bucket.shift();
}
});
// 每次最外层while循环后m要乘等10
// 也就是要判断下一位 比如当前是个位 下次就要判断十位
m *= 10;
}
return array
}

View File

@ -42,6 +42,7 @@ var sortAlgorithm = {
selectionSort: new SelectionSort(animation),
insertionSort: new InsertionSort(animation),
randomQuickSort: new RandomQuickSort(animation),
radixSort: new RadixSort(animation),
}
// 遍历每一种算法