桶排序

function sortScore(arr) {
  const initArr = new Array(11).fill(0, 0, 11); // index 代表分数(0-10分),初始化时,每个分数的人数为0

  for (let i = 0; i < arr.length; i++) {
    // 把得分的人数放到 initArr 中,比如 8 分有一个,initArr[8] + 1
    initArr[arr[i]] += 1;
  }

  const sortArr = [];
  // 按分数从高到底排序,有多人会得到相同的分数,所以要把人数循环一次,打印出分数
  for (let i = 10; i >= 0; i--) {
    if (initArr[i] > 0) {
      for (let num = 0; num < initArr[i]; num++) {
        sortArr.push(i);
      }
    }
  }
  console.log(sortArr); // [8, 5, 5, 3, 2]
}

const arr = [5, 3, 5, 2, 8];
sortScore(arr);

缺点:

  • 排序的分数不能与人相对应
  • 浪费空间
  • 不能对小数进行排序
Last Updated: 7/24/2019, 12:00:04 PM