Count Sort

The same idea can be used to implement an O(n) sort called the Count Sort:

int countSort(int a[], int n, int min, int max)
{
  int i, j, k;
  int *b;
 
  b = (int *) malloc( max - min + 1);
  if ( b == NULL )
    return -1;

  for ( i = 0; i < max - min + 1; i++ )
     b[i] = 0;

  for ( i = 0; i < n; i++ )
     b[ a[i] - min  ]++;

  k = 0;
  for ( i = 0; i < max - min + 1; i++ )
     for ( j = 0;  j < b[i]; j++ )
        a[k++] = i + min;

  free(b);
  return 0;

}


Next Slide