zoukankan      html  css  js  c++  java
  • 计数排序的C实现

     1 /×
     2  ×统计数组中元素出现的个数,将得到的统计个数记录在新数组的中
     3  ×/
     4 
     5 void CountingSort(int *array, int length)
     6 {
     7     int t;
     8     int i, z = 0;
     9     int min, max;
    10     int *count;
    11 
    12     /*找出数组的最大最小值,确定计数的范围
    13     */
    14     min = max = array[0];
    15     for(i = 0; i < length; ++i) {
    16         if(array[i] < min)
    17             min = array[i];
    18         else if(array[i] > max)
    19             max = array[i];
    20     }
    21     
    22     //分配统计计数数组空间,大小为原数组的数域范围
    23     count = (int *)malloc((max - min + 1) * sizeof(int));
    24     for(i = 0; i < max - min + 1; ++i) {
    25         count[i] = 0;
    26     }
    27     //统计array中每个元素出现的次数,并将次数保存在
    28     //count[array[i]]中,此处减去min是为了节省统计数组的空间
    29     for(i = 0; i < length; ++i) {
    30         count[array[i] - min]++;
    31     }
    32 
    33     //将统计数组还原到array中,其中array范围为min到max
    34     //此处很好的解决了统计时节省空间减去min造成的不对称问题
    35     for(t = min; t <= max; ++t) {
    36         for(i = 0; i < count[t-min]; ++i) {
    37             array[z++] = t;
    38         }
    39     }
    40     free(count);
    41 }

    对于处理小型数据的排序速度较快,但是空间开销过大不适合大型数据。

  • 相关阅读:
    python encode 理解
    java类中的static代码块作用
    stanford 词性标注中词性的解释
    Stanford3.8.0依存句法分析在java中运行
    nginx和flask安装与配置
    docker使用
    docker安装
    哈工大分词安装及使用linux
    哈工大分词器中自定义词典的使用
    zookeeper集群安装
  • 原文地址:https://www.cnblogs.com/jojodru/p/2494628.html
Copyright © 2011-2022 走看看