sunburnt
Feb 27th, 2004, 09:39 PM
Any optimizations?
// v is the vector to sort
// min is the smallest item in the array
// max is the largest.
// counting sort functions in O(range * n) time
void counting_sort(vector<int>& v, int min, int max)
{
int range = max - min + 1;
int* counts = new int[range];
int offset = -min;
vector<int>::size_type size = v.size();
memset(counts, 0, range * sizeof(int));
for(int i = 0; i < size; ++i)
++counts[v[i] + offset];
int index = 0;
for(int i = 0; i < range; ++i)
while(counts[i]--)
v[index++] = i - offset;
delete [] counts;
return;
}
// v is the vector to sort
// min is the smallest item in the array
// max is the largest.
// counting sort functions in O(range * n) time
void counting_sort(vector<int>& v, int min, int max)
{
int range = max - min + 1;
int* counts = new int[range];
int offset = -min;
vector<int>::size_type size = v.size();
memset(counts, 0, range * sizeof(int));
for(int i = 0; i < size; ++i)
++counts[v[i] + offset];
int index = 0;
for(int i = 0; i < range; ++i)
while(counts[i]--)
v[index++] = i - offset;
delete [] counts;
return;
}