Counting sort algorithm is a sorting algorithm which do not involve comparison between elements of an array. In this tutorial I am sharing counting sort program in C. Steps that I am doing to sort the elements are given below.

1. First of all I am reading n elements in array a[]. While reading the array elements I have also calculated the maximum element.

2. Now the actual sorting is done in counting_sort() function. Here I am counting the occurrence of each element in the array a[] and then storing it at the index equal to the value of that element. For example occurrence of element 5 will be stored at index 5, occurrence of element 9 will be stored at index 9 and so on.

3. As the value at each index in count[] array is the occurrence of that index or element, so the elements are printed in ascending order by printing each index number of times equal to its corresponding value.

**Also Read: Merge Sort in C**

Counting Sort Example – Image Source |

I have also added a video tutorial below that will help you to understand the counting sort algorithm easily. If you are facing any problem then ask it in the comment section.

## Program for Counting Sort in C

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include<stdio.h> void counting_sort(int a[],int n,int max) { int count[50]={0},i,j; for(i=0;i<n;++i) count[a[i]]=count[a[i]]+1; printf("\nSorted elements are:"); for(i=0;i<=max;++i) for(j=1;j<=count[i];++j) printf("%d ",i); } int main() { int a[50],n,i,max=0; printf("Enter number of elements:"); scanf("%d",&n); printf("\nEnter elements:"); for(i=0;i<n;++i) { scanf("%d",&a[i]); if(a[i]>max) max=a[i]; } counting_sort(a,n,max); return 0; } |

**Output**

Hei! Thanks for the code! It was very useful for me ðŸ™‚ I really appreciate that it is clean and very easy to understand.

though, I found a verry, verry little mistake here and i thought you might want to correct it ðŸ˜€

printf(“nEnter elements:”); needs a “\”

Thanks again and good luck with what you are doing here ðŸ™‚

finally working one

Thanks for the post.

However, I wonder this approach gives a ‘Stable sorting’, which is a characteristic of Counting Sort, as it does not actually sort by keys + pointers to records, does it?