美文网首页
排序算法(十)计数排序

排序算法(十)计数排序

作者: ChooAcc | 来源:发表于2020-05-09 15:13 被阅读0次

排序算法(十)计数排序

  计数排序是一种是一个非基于比较的排序算法,该算法以空间换时间,通过建立额外的辅助空间,在扫描原数组将元素出现次数记录在辅助空间中,最后再计算辅助空间内的数据,可确定每个元素的位置。计数排序是一个稳定的排序算法。当输入的元素是 n 个 0到 k 之间的整数时,时间复杂度是O(n+k),空间复杂度也是O(n+k),其排序速度快于任何比较排序算法。当k不是很大并且序列比较集中时,计数排序是一个很有效的排序算法。

图片演示

计数排序

算法思路步骤

  1. 找出源数组中最大max、小值min;
  2. 建立 max - min + 1 大小的辅助存储空间;
  3. 遍历源数组,以源数组的值 - min作为辅助数组的下标,该下标对应的辅助数组的值自增壹;
  4. 遍历辅助数组,辅助数组中,值大于零的下标 + min即为源数组的值,依次遍历,将值记录在结果数组中,每记录一次值时,对应的辅助数组的值增减壹,直到值为0时,跳转到下一下标,直至遍历完整个数组。

代码实现(TypeScript实现)

let originData: Array<number> = [5, 6, 7, 9, 10, 15, 13, 19, 5, 9, 13, 10];
// 求范围
let min = originData[0];
let max = min;
// 定义计数数组
originData.forEach(element => {
    if (element < min) { min = element; }
    if (element > max) { max = element; }
});
let tempData: Array<number> = new Array<number>(max - min + 1);
// 计数
originData.forEach((value) => {
    if (!tempData[value]) {
        tempData[value - min] = 1;
    } else {
        tempData[value - min]++;
    }
})
// 结果
let res: number[] = [];
let resIndex = 0;
tempData.forEach((element, index) => {
    while (element > 0) {
        res[resIndex++] = index + min;
        element--;
    }
});
console.log(res);   // [5, 5, 6, 7, 9, 10, 10, 13, 15, 19]

适用范围

  1. 计数排序只适用于元素值较为集中的情况,若集合中存在最大最小元素值相差甚远的情况,则计数排序开销较大、性能较差。
  2. 计数排序要求输入的数据必须是有确定范围的整数,若待排序集合中存在元素值为浮点数形式或其他形式,则需要对元素值或元素差值做变换,会加大性能消耗。

相关文章

  • 排序算法概述

    十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序、希尔排序、计数排序,基数排序,桶排序 算法...

  • 十大排序算法

    算法说明 十大排序算法分别是:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 常见十大排序算法概述

    排序算法概述 网上常见的排序算法有十种:冒泡排序、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排...

  • 排序算法(十)计数排序

    排序算法(十)计数排序   计数排序是一种是一个非基于比较的排序算法,该算法以空间换时间,通过建立额外的辅助空间,...

  • Algorithm -- 排序算法

    单链表十大经典排序算法冒泡排序选择排序插入排序归并排序快速排序堆排序计数排序桶排序 1. 十大经典排序算法 十大经...

  • 算法and数据结构

    算法 冒泡排序 选择排序 计数排序

  • 排序算法-8---计数排序

    # 排序算法-8---计数排序 概念 计数排序(Counting sort)是一种稳定的线性时间排序算法。该算法于...

  • 数据结构和算法排序(三)

    常见十大排序算法: 冒泡排序、选择排序、插入排序、快速排序、堆排序希尔排序、归并排序、计数排序、基数排序、桶排序 ...

  • 08-计数排序(Counting Sort)

    计数排序(Counting Sort) 本节内容,继续介绍排序算法,在本节内容之前,介绍过7种排序算法,那计数排序...

网友评论

      本文标题:排序算法(十)计数排序

      本文链接:https://www.haomeiwen.com/subject/ojsknhtx.html