算法描述

基数排序也是利用了桶的概念,原理是将整数按位数切割,然后按照每一位去做比较。

动图演示

radixSort.gif

算法实现

  1. /**
  2. * 基数排序
  3. * @param {number[]} arr 数组
  4. */
  5. const radixSort = (arr) => {
  6. const maxLength = String(Math.max.apply(null, arr)).length
  7. let result = arr
  8. let stack = []
  9. for (let i = 1; i <= maxLength; i++) {
  10. stack = []
  11. for (let j = 0; j < result.length; j++) {
  12. const temp = Number(String(result[j]).split('').reverse()[i - 1]) || 0
  13. if (!stack[temp]) stack[temp] = []
  14. stack[temp].push(result[j])
  15. }
  16. result = []
  17. for (let j = 0; j < stack.length; j++) {
  18. if (stack[j]) {
  19. result = [...result, ...stack[j]]
  20. }
  21. }
  22. }
  23. return result
  24. }