Algo:
COUNTING-SORT(A,B,k) 1. let C[0..k] be a new array 2. for i = 0 to k 3. C[i] = 0 4. for j = 1 to A.length 5. C[A[j]] = C[A[j]] + 1 6. // C[i] now contains the number of elements equal to i . 7. for i = 1 to k 8. C[i] = C[i] + C[i - 1] 9. // C[i] now contains the number of elements less than or equal to i . 10.for j = A.length downto 1 11. B[C[A[j]]] = A[j] 12. C[A[j]] = C[A[j]] - 1
Implemented Code:
#include<bits/stdc++.h>
using namespace std;
void countingSort(int a[],int k,int n)
{
int i,j;
int b[15],c[100];
for(i=0;i<=k;i++)
c[i]=0;
for(j=1;j<=n;j++)
c[a[j]]=c[a[j]]+1;
for(i=1;i<=k;i++)
c[i]=c[i]+c[i-1];
for(j=n;j>=1;j--)
{
b[c[a[j]]]=a[j];
c[a[j]]=c[a[j]]-1;
}
cout<<"Sorted Array is:"<<endl;
for(i=1;i<=n;i++)
{
cout<<" ";
cout<<b[i];
}
}
int main()
{
int i,k=9; //k means maximum value in an array
int A[]={5,2,9,5,2,3,5};
int n=sizeof(A)/sizeof(A[0]);
countingSort(A,k,n);
return 0;
}
Reference:
http://scanftree.com/Data_Structure/Counting-sort
http://www.thecrazyprogrammer.com/2015/04/counting-sort-program-in-c.html
CLRS:
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/countingSort.htm
Tuts:
Complexity:
Time: O(k)+O(n)+O(k)+O(n)=O(n) if K=O(n)
Space: O(n)