1. sort('javascript') // aacijprstv
    2. sort('dbca') // abcd

    提示: 见tips.md

    答案:

    1. function counting_sort(str){
    2. const A = [...str].map(c => c.toLowerCase().charCodeAt(0))
    3. const max = Math.max(...A)
    4. // 累计数组
    5. const B = Array(max + 1).fill(0)
    6. // 结果数组
    7. const C = Array(A.length)
    8. // 累计位递增
    9. A.forEach((_, i) => B[A[i]]++)
    10. // 累计求和
    11. for(let i = 1; i < B.length; i++) {
    12. B[i] = B[i-1] + B[i]
    13. }
    14. // 结果取出
    15. for(let i = 0; i < A.length; i++) {
    16. const p = B[A[i]] - 1 // 回写位置
    17. B[A[i]] -- // 新回写位置
    18. C[p] = str[i] // 回写结果
    19. }
    20. return C.join('')
    21. }