zoukankan      html  css  js  c++  java
  • 计数排序

    适用于数组元素范围确定

    数组中尽量有重复元素的情况

    原理为申请一个辅助数组,里面存放当前数组中元素的计数。

    遍历原数组,相同元素计数++

    void CountSort(int* arr,int nlength)
    {
        int max = 0;
        int min = 0;
        //找到最大值和最小值 
        for(int i=0;i<nlength;i++)
        {
            if(arr[i] > max)
                max = arr[i];
            if(arr[i] < min)
                min = arr[i];
        }
        //申请计数数组 
        int* ptemp = (int*)malloc(sizeof(int)*(max-min+1));
        memset(ptemp,0,sizeof(int)*(max-min+1));
        //遍历原数组,给计数数组赋值 
        for(int i=0;i<nlength;i++)
            ptemp[arr[i]-min]++;
    
        int j = 0;
        //遍历计数数组,重新排序原数组 
        for(int i=0;i<max-min+1;i++)
        {
            while(ptemp[i])
            {
                arr[j] = i+min; 
                j++;
                ptemp[i]--;
            }
        }
    
        free(ptemp);
        ptemp = NULL;
    }
  • 相关阅读:
    第八章 路由器交换机及其操作系统的介绍
    k-Tree DP计数
    Drop Voicing 最长升序
    高精度
    1196D2
    C
    POJ 3974 马拉车
    2020.8.1第二十六天
    2020.7.31第二十五天
    每日日报
  • 原文地址:https://www.cnblogs.com/TheQi/p/9103578.html
Copyright © 2011-2022 走看看