// Counting sort program in c
#include<stdio.h>
void CountingSort(int a[], int sorted_array[], int max_element, int n);
int main()
{
int a[20],i,n;
int max_element, sorted_array[20];
printf("Enter number of elements in array : ");
scanf("%d",&n);
// Inputting elements
for(i=1;i<=n;i++)
{
printf("Enter number %d: ",i+1);
scanf("%d",&a[i]);
}
// Displaying Elements before counting sort
printf("Items in the array are : ");
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
// Finding Maximum element
max_element=a[1];
for(i=2;i<=n;i++)
{
if(a[i] > max_element)
{
max_element = a[i];
}
}
//Applying counting sort
CountingSort(a, sorted_array, max_element, n);
// Displaying elements after count sort
printf("\nElements after count sort : ");
for(i=1;i<=n;i++)
{
printf("%d ",sorted_array[i]);
}
return 0;
}
void CountingSort(int a[],int sorted_array[],int max_element, int n)
{
int aux_array[max_element];
int i,j;
// Initializing auxiliary array
for(i=0;i<=max_element;i++)
{
aux_array[i]=0;
}
// Placing Frequency of each element in aux_array
for(j=1;j<=n;j++)
{
aux_array[a[j]]=aux_array[a[j]]+1;
}
// Adding elements of current and previous index position
for(i=1;i<=max_element;i++)
{
aux_array[i]=aux_array[i]+aux_array[i-1];
}
// Placing elements in sorted_array
for(j=n;j>=1;j--)
{
sorted_array[aux_array[a[j]]] = a[j];
aux_array[a[j]] = aux_array[a[j]] - 1;
}
}