帮我写一个js的基数排序
时间: 2024-02-18 20:02:35 浏览: 80
当然可以,以下是一个js基数排序的实现代码:
```javascript
function radixSort(arr) {
const max = Math.max(...arr);
const buckets = Array.from({ length: 10 }, () => []);
const bucketNum = String(max).length;
for (let i = 0; i < bucketNum; i++) {
for (let j = 0; j < arr.length; j++) {
const num = arr[j];
const digit = getDigit(num, i + 1);
buckets[digit].push(num);
}
arr = [].concat(...buckets);
buckets.forEach(bucket => (bucket.length = 0));
}
return arr;
}
function getDigit(num, place) {
return Math.floor(Math.abs(num) / Math.pow(10, place - 1)) % 10;
}
```
这里的基数排序实现是利用桶排序的思想,将数据按照位数从低到高依次排序。具体实现方式是:
- 找到待排序数组的最大值,确定需要排序的位数;
- 从个位数开始,按照位数将数字放进对应的桶中;
- 将桶中的数字按照顺序取出,得到新的数组;
- 重复上述步骤,直到所有位数都处理完成。
这个基数排序的时间复杂度是O(dn),其中d表示数字的位数,n表示数组的长度。
阅读全文