思路
使用 hashtable 做记录
如果发现数字 a 就记录 a:1,如果再一次出现就+1,变为 a:2
最后把哈希表的 key 全部打印出来,如果 a:b,那么 a 就要打印 b 次
举例说明
[4,7,1,5,1,2,4]→循环 i<=array.length→{0:01:22:13:04:25:16:07:1}→然后历遍这个 hashtable,打印出key,为0的就没有,i<=max→[1,1,2,4,4,5,7]
实际代码
let sort = (numbers) => {let hashTable = {}, max = 0, result = []for (let i = 0; i < numbers.length; i++) {if (!(numbers[i] in hashTable)) {hashTable[numbers[i]] = 1} else {hashTable[numbers[i]] += 1}if (numbers[i] > max) {max = numbers[i]}}for (let j = 0; j <= max; j++) {if (j in hashTable) {for (let i = 0; i < hashTable[j]; i++) {result.push(j)}}}return result}
时间复杂度
O(n+max)
优缺点
优点
只遍历一次数组,高效,用空间换时间
缺点
占用的内存多
