排序:计数排序

简介: 排序:计数排序

一、概念

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

二、思想

利用数组统计相同数据出现的次数,例如整型数据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]--;
        }
    }
}


目录
相关文章
|
7月前
|
存储 算法 搜索推荐
排序篇(四)----归并排序
排序篇(四)----归并排序
40 0
|
14天前
|
存储 搜索推荐 Java
排序之计数排序
排序之计数排序
|
5月前
|
算法 搜索推荐 大数据
【算法】排序——归并排序和计数排序
上两篇文章讲解了插入排序、选择排序以及交换排序,每种类型的排序大类下都有一到两种排序,今天给大家带来的是归并排序,和前面几种排序一样都属于比较排序中的一种,是通过比较数组中的元素来实现排序的,还给大家带来一种非比较排序计数排序,让我们开始今天的排序之吧!!!
|
4月前
|
搜索推荐 算法
排序——计数排序
排序——计数排序
18 0
|
4月前
|
算法 搜索推荐
排序——归并排序
排序——归并排序
22 0
|
7月前
|
存储
排序篇(五)----非比较排序
排序篇(五)----非比较排序
20 0
|
11月前
|
存储 算法 搜索推荐
排序(4)——归并排序
今天给大家带来比较排序的最后一种,归并排序,这个排序,需要我们对递归,循环控制要有着较强的理解,我相信大家通过前面和小编的一起学习,这里肯定也是得心应手。
73 0
|
算法 搜索推荐
排序——归并排序和计数排序
介绍归并排序和计数排序
87 0
排序——归并排序和计数排序
|
搜索推荐 算法 C++
C++实现排序 - 03 计数排序、桶排序和基数排序
今天我们继续来整理与 O(n+k) 有关的三个排序算法,即计数排序、桶排序和基数排序。
500 0
C++实现排序 - 03 计数排序、桶排序和基数排序
|
算法
排序——快速排序
排序——快速排序
96 0
排序——快速排序