zoukankan      html  css  js  c++  java
  • distribution counting—a sorting method from aocp

    /*
    *From the art of computer programming:vol 3:Sorting and Searching
    *时间:2012年3月6日21:02:32
    *作者:张超
    *Email:uestczhangchao@gmail.com
    */
    
    #include <iostream> 
    using namespace std; 
    void Distribution_Counting(int array[], int arraylen)
    {
        int *tmp = new int[arraylen];
        int *count = NULL;
        int i,j;
        int minvalue=INT_MAX, maxvalue=INT_MIN;
        int valuescope;
        memset(tmp,0,sizeof(int)*arraylen);
    
        
        for (i=0; i<arraylen; i++)
        {
            if (array[i]<minvalue)
            {
                 minvalue=array[i];
            }
            if (array[i]>maxvalue)
            {
                maxvalue = array[i];
            }
            
        }
    
        valuescope = maxvalue-minvalue+1;
        count = new int[valuescope];
    
    
        memset(count,0,sizeof(int)*valuescope);
        
    
        //统计array内的数字在minvalue和maxvalue范围的出现次数
        for (i=0; i<arraylen; i++)
        {
            count[array[i]-minvalue]++;
        }
    
        //统计minvalue和maxvalue范围内,不小于该范围内某个数的出现频数
        //count[i]对应小于value+i的数出现的次数
        for (i=1; i<valuescope; i++)
        {
            count[i] = count[i] + count[i-1];
        }
    
        //依次输出每个数字,输出的顺序为non-descending顺序,并且保证是有序的
        for (j=arraylen-1;j>=0;j--)
        {
            ////取出该关键字出现的次数
            i = count[array[j]-minvalue];
            tmp[i-1] = array[j];
            --count[array[j]-minvalue];
    
        }
    
        //将结果拷贝到array数组中
        for (i=0; i<arraylen; i++)
        {
            array[i] = tmp[i];
        }
    
        delete []tmp;
        delete []count;
    
    }
    
    
    int main()
    {
        int data[] = {8,5,4,5,6,10};
        int size = sizeof(data)/sizeof(int);
        Distribution_Counting(data,size);
        for(int i=0; i<size;i++)
        {
            cout <<" " << data[i] << " ";
        }
        cout << endl;
    
        return 0;
    }
  • 相关阅读:
    OSI模型白话
    并发
    初始化与清理
    多线程
    recyclerview Adapter
    recyclerview刷新
    surfaceview
    viewgroup绘制流程
    view配置
    项目遇到的问题
  • 原文地址:https://www.cnblogs.com/justinzhang/p/2382673.html
Copyright © 2011-2022 走看看