排序:计数排序

一、概念

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

二、思想

利用数组统计相同数据出现的次数,例如整型数据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]--;
        }
    }
}
相关推荐
无极低码3 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发3 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
罗超驿4 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
superior tigre4 小时前
22 括号生成
算法·深度优先
努力也学不会java5 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎5 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
ECT-OS-JiuHuaShan6 小时前
朱梁万有递归元定理,重构《易经》
算法·重构
智者知已应修善业6 小时前
【51单片机独立按键控制数码管移动反向,2片74CH573/74CH273段和位,按键按下保持原状态】2023-3-25
经验分享·笔记·单片机·嵌入式硬件·算法·51单片机
khddvbe7 小时前
C++并发编程中的死锁避免
开发语言·c++·算法