排序:计数排序

简介: 排序:计数排序

一、概念

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

二、思想

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

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

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

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

三、优缺点

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

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

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

四、代码实现(C语言)

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]--;
        }
    }
}


目录
相关文章
|
人工智能 Python
beets,一个有趣的 Python 音乐信息管理工具!
beets,一个有趣的 Python 音乐信息管理工具!
464 4
|
JavaScript API
【Vue 3】推荐 1 个简约且美丽的天气组件
【Vue 3】推荐 1 个简约且美丽的天气组件
|
开发框架 JavaScript 前端开发
【Node系列】Express 框架
Express.js 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,提供一系列强大的特性来帮助你创建各种 web 和移动设备应用。
458 2
|
SQL 监控 前端开发
Springboot过滤器和拦截器详解及使用场景
过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
|
存储 缓存 JSON
2024年java面试准备--spring篇续集(二)
2024年java面试准备--spring篇续集(二)
248 0
|
前端开发
前端学习笔记202303学习笔记第五天-了解vite项目的运行流程1
前端学习笔记202303学习笔记第五天-了解vite项目的运行流程1
141 0
|
Devops Serverless
Serverless 入门门槛低
Serverless 入门门槛低
211 0
|
Java
java安装1335错误解决办法(亲测)
心血来潮想了解一下java,结果一开始就碰到了让心“恶心”的1335错误。废话不多说,直接看下面: 你可以先尝试在这个链接下载java.exe文件http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.
2491 0

热门文章

最新文章