louzhedong / blog

前端基础,深入以及算法数据结构

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

计数排序

louzhedong opened this issue · comments

算法名称

计数排序

实现思路

  • 使用一个额外的数组来统计每个数字出现的次数
  • 通过数组中的最大值和最小值来计算额外数组的大小
  • 遍历原数组,在额外数组中进行统计
  • 遍历额外数组,构建新的数组

算法分析

时间复杂度为O(N),但空间复杂度较高,是一种以空间换时间的算法

算法实现

function CountSort(array) {
  var length = array.length;

  var min = Number.MAX_VALUE;
  var max = Number.MIN_VALUE;

  for (var i = 0; i < length; i++) {
    if (array[i] < min) {
      min = array[i];
    }
    if (array[i] > max) {
      max = array[i];
    }
  }

  var distance = max - min;
  var countArray = [];
  for (var i = 0; i <= distance; i++) {
    countArray[i] = 0;
  }

  for (var i = 0; i < length; i++) {
    countArray[array[i] - min] += 1;
  }

  var result = [];
  for (var i = 0; i <= distance; i++) {
    for (j = 0; j < countArray[i]; j++) {
      result.push(i + min);
    }
  }

  return result;
}