排序:计数排序

一、概念

计数排序是非比较排序,是对哈希直接定址法的变形应用。

二、思想

利用数组统计相同数据出现的次数,例如整型数据m出现n次,就在数组m位置记录数据为n。

最后从头遍历数组打印数据即可。

通俗来讲就是,数组下标即为数据,下标所指位置的值即为数据出现的次数。

对于较大的数据,可以利用映射关系。用所有数据减去最小的数据,映射到计数数组的0-range位置上。

三、优缺点

优点:1.数据较为集中时,效率极高

缺点:1.只适合较为集中的数据,不适合分散的数据

2.只适合整型数据,不适合浮点型、字符型数据

四、代码实现(C语言)

cpp 复制代码
void CountSort(int* a, int n)
{
    int min = a[0];
    int max = a[0];
    //找到数据中的最大值与最小值
    for (int i = 0; i < n; i++)
    {
        if (a[i] < min)
            min = a[i];
        if (a[i] > max)
            max = a[i];
    }
    
    //数据范围
    int range = max - min + 1;

    //计数数组,初始值为0
    int* count = (int*)calloc(range, sizeof(int));

    //统计相同数据出现的次数
    for (int i = 0; i < n; i++)
    {
        count[a[i] - min]++;
    }

    //输出数据
    for (int i = 0; i < range; i++)
    {
        while (count[i])//计数数组该位置存在数据
        {
            printf("%d ", i + min);
            count[i]--;
        }
    }
}
相关推荐
Codebee18 分钟前
OneCode图生代码技术深度解析:从可视化设计到注解驱动实现的全链路架构
css·人工智能·算法
刘大猫2620 分钟前
Datax安装及基本使用
java·人工智能·算法
一定要AK1 小时前
萌新赛练习
数据结构
Gyoku Mint3 小时前
深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
人工智能·pytorch·python·深度学习·神经网络·算法·聚类
葫三生4 小时前
如何评价《论三生原理》在科技界的地位?
人工智能·算法·机器学习·数学建模·量子计算
拓端研究室6 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法
随缘而动,随遇而安8 小时前
第八十八篇 大数据中的递归算法:从俄罗斯套娃到分布式计算的奇妙之旅
大数据·数据结构·算法
IT古董9 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
水木兰亭12 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
Jess0713 小时前
插入排序的简单介绍
数据结构·算法·排序算法