非比较排序

简介: 非比较排序

非比较排序

思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用

操作步骤:

统计相同元素出现次数
根据统计的结果将序列回收到原来的序列中

image.png

void CountSort(int* a, int n)
{
    int max = a[0], min = a[0];
    for (int i = 0; i < n; ++i)
    {
        if (a[i] > max)
        {
            max = a[i];
        }
        if (a[i] < min)
        {
            min = a[i];
        }
    }
    int range = max - min + 1;
    int* count = (int*)malloc(sizeof(int) * range);
    if (count == NULL)
    {
        perror("malloc fail");
        exit(-1);
    }
    else
    {
        memset(count, 0, sizeof(int) * range);
        for (int i = 0; i < n; i++)
        {
            count[a[i]-min]++;
        }
        int j = 0;
        for (int i = 0; i < range; i++)
        {
            while (count[i]--)
            {
                a[j++] = i + min;
            }
        }
    }
    free(count);
}
void TestCountSort()
{
    int a[] = { 105,5,8,2,50,7,-1,100,66 };
    int n = sizeof(a) / sizeof(a[0]);
    CountSort(a, n);
    Print(a, n);
}
int main()
{
    TestCountSort();
}

计数排序的特性总结:

计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。
时间复杂度:O(MAX(N,范围))
空间复杂度:O(范围)

相关文章
|
5月前
|
搜索推荐 算法
计数排序就是这么容易
计数排序就是这么容易
21 0
|
算法 搜索推荐
归并排序与非比较排序详解
归并排序与非比较排序详解
71 0
|
6月前
|
存储 搜索推荐 C++
C++计数排序的实现
C++计数排序的实现
|
11月前
|
搜索推荐 算法
计数排序详解
计数排序详解
|
6月前
|
搜索推荐 BI
排序算法:非比较排序(计数排序)
排序算法:非比较排序(计数排序)
77 0
|
存储
排序篇(五)----非比较排序
排序篇(五)----非比较排序
38 0
|
搜索推荐 算法
【排序算法(四)】归并排序&&计数排序(非比较排序)以及八大排序算法的总结(上)
【排序算法(四)】归并排序&&计数排序(非比较排序)以及八大排序算法的总结(上)
|
人工智能 搜索推荐 算法
【排序算法(四)】归并排序&&计数排序(非比较排序)以及八大排序算法的总结(下)
【排序算法(四)】归并排序&&计数排序(非比较排序)以及八大排序算法的总结(下)
|
搜索推荐
基础排序算法【计数排序】非比较排序
待排序数组元素下标0对应着计数数组下标0,待排序元素下标1对应的计数数组下标1,待排序元素下标2对应着计数数组下标2,……待排序元素100的下标,对应着计数数组下标100.
87 0
|
搜索推荐 算法
排序算法——计数排序(非比较排序)
​ 哈喽大家好,我是保护小周ღ,本期为大家带来的是排序算法中的计数排序,非常的有意思,值得学习而且计数排序是非交换排序,分享所有源代码,粘贴即可运行,保姆级讲述,包您一看就会,快来试试吧~ ​
102 0