mirror of
https://gitee.com/coder-xiaomo/algorithm-visualization
synced 2025-01-10 19:58:18 +08:00
实现 基数排序算法(不要合分支);动画展示不好展示
This commit is contained in:
parent
7c62e215c5
commit
5d6d7096e6
@ -507,7 +507,7 @@ class CountingSort extends Sort {
|
|||||||
* 基数排序算法 Radix Sort v0.1.0
|
* 基数排序算法 Radix Sort v0.1.0
|
||||||
*
|
*
|
||||||
* @author coder-xiaomo
|
* @author coder-xiaomo
|
||||||
* @date 2022-05-19
|
* @date 2022-08-08
|
||||||
*/
|
*/
|
||||||
class RadixSort extends Sort {
|
class RadixSort extends Sort {
|
||||||
|
|
||||||
@ -530,8 +530,48 @@ class RadixSort extends Sort {
|
|||||||
sort(array) {
|
sort(array) {
|
||||||
if (array.length == 0)
|
if (array.length == 0)
|
||||||
return array
|
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
|
return array
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,6 +42,7 @@ var sortAlgorithm = {
|
|||||||
selectionSort: new SelectionSort(animation),
|
selectionSort: new SelectionSort(animation),
|
||||||
insertionSort: new InsertionSort(animation),
|
insertionSort: new InsertionSort(animation),
|
||||||
randomQuickSort: new RandomQuickSort(animation),
|
randomQuickSort: new RandomQuickSort(animation),
|
||||||
|
radixSort: new RadixSort(animation),
|
||||||
}
|
}
|
||||||
|
|
||||||
// 遍历每一种算法
|
// 遍历每一种算法
|
||||||
|
Loading…
Reference in New Issue
Block a user