编辑代码

function linearCountingSort(arr) {
  if (arr.length <= 1) {
    return arr; // 数组长度小于等于1时,无需排序
  }

  // 找到数组中的最小值和最大值
  let min = arr[0];
  let max = arr[0];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] < min) {
      min = arr[i];
    }
    if (arr[i] > max) {
      max = arr[i];
    }
  }

  // 创建计数数组,长度为待排序范围的大小
  const countArray = new Array(max - min + 1).fill(0);

  // 统计每个元素的频次
  for (let i = 0; i < arr.length; i++) {
    countArray[arr[i] - min]++;
  }

  // 根据频次直接在原始数组中更新元素的位置
  let index = 0;
  for (let i = 0; i < countArray.length; i++) {
    while (countArray[i] > 0) {
      arr[index++] = i + min;
      countArray[i]--;
    }
  }

  return arr;
}

// 示例
const arr = [4, 2, 7, 1, 3, 6, 5];
console.log("原始数组:", arr);

const sortedArray = linearCountingSort(arr);

console.log("排序后的数组:", sortedArray);