编辑代码

function countingSort(arr) {
  const n = arr.length;

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

  // 计算每个元素的频次
  const countArray = new Array(max - min + 1).fill(0);
  for (let i = 0; i < n; 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]--;
    }
  }
}

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

countingSort(arr);

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