Counting Sort

Counting sort is sorting algorithm based on keys between specific range. It works by counting the number of objects having distinct key values. Then doing some arithmetic to calculate the position of each object in the output sequence.



									static void CountingSort(int* data, int dataLength, int min, int max) {
	int cLen = max - min + 1;
	int* count = new int[cLen];
	int z = 0;

	for (int i = 0; i < cLen; i++)
		count[i] = 0;

	for (int i = 0; i < dataLength; i++)
		count[data[i] - min]++;

	for (int i = min; i <= max; i++)
	{
		while (count[i - min]-- > 0)
		{
			data[z] = i;
			++z;
		}
	}

	delete count;
}
								


Example

									int data[] = { -1, 25, -58964, 8547, -119, 0, 78596 };
CountingSort(data, 7, -58964, 78596);
								


Output

									-58964
-119
-1
0
25
8547
78596