Algorithm 5_Counting_Sort:
Counting sort assumes that each of the n input elements is an integer in the range 0 to k,for some intefer k.When k=O(n),the soer runs in big theta(n) time.The basic idea of counting sort is to determine,for each input element x,the number of elements less than x.This information can be used to place element x directly into its position in the output array.
public static void Sort(Int32[] input, Int32 range)
{
Int32[] temp = new Int32[range+1];
Int32[] output = new Int32[range+1];
for (Int32 j = 0; j < input.Length; j++)
temp[input[j]]++;
//temp[i] now contains the number of element equal to i
for (Int32 i = 1; i <= range; i++)
temp[i] += temp[i - 1];
//temp[i] now contain the number of element less than or equal to i
for (Int32 j = input.Length - 1; j >= 0; j--)
{
output[temp[input[j]]] = input[j];
temp[input[j]]--;
}
//now output[1,…..range] hold the result.
for (Int32 i = 0; i < input.Length; i++)
input[i] = output[i+1];
//now the elements in input array is sorted
}
An important property of counting sort is that it is stable:numbers with the same value appear in the output array in the same order as they do in the input array.Normally,the property of stability is important only when satellite data are carried around with the element being sorted.