時間復雜度為O(n).
計數排序的基本思想就是對每一個輸入元素X,確定出小于X的元素個數。
有了這一信息就可以把X直接放到它在最終輸出數組中的位置上。
例如,如果有17個元素小于X,則X就屬于第18個輸出位置。
在計數排序算法的代碼中,我們假定輸入是個數組A[0...n-1],length[A]=n。另外還需要兩個數組:存放排序結果的B[0...n-1],以及提供臨時存儲區的C[0...k].
#include <stdio.h>
#include 
<stdlib.h>
#include 
<iostream>
using namespace std;

void CountSort(int a[], int b[],int k,int num)
{
    
int* c = new int[k+1];
    
for (int i=0;i<=k;i++)
       c[i]
=0;
    
int size = num;
    
for (int j=0;j<size;j++)
       c[a[j]]
++;
    
//c[i]包含等于i的元素個數
    for (i=1;i<=k;i++)
       c[i]
=c[i]+c[i-1];
    
//c[i]包含小于等于i的元素個數
    for (j=size-1;j>=0;j--)
    
{
        b[c[a[j]]
-1]=a[j];
        c[a[j]]
--;
    }


        delete [] c;
}

void main()
{
    
int num,max;
    cout
<<"輸入最大整數及輸入個數"<<endl;
    cin
>>max;
    cin
>>num;
    
int* a = new int[num];
    
int* b = new int[num];
    cout
<<"排序前:"<<endl;
    
for(int i=0;i<num;i++)
    
{
        cin
>>a[i];
        
if (a[i]>max)
            i
--;
    }

        
    CountSort(a,b,max,num);

    cout
<<"排序后:"<<endl;
    
for (int j=0;j<num;j++)
    
{
        cout
<<b[j]<<endl;
    }


    delete [] a;
    delete [] b;
}