天天看點

十大排序算法之計數排序

計數排序算法:

void countingsort_10(vector<int> &_snum, int _len)
{
	vector<int>::iterator k;
	k = max_element(_snum.begin(), _snum.end());
	int knum = _snum[k - _snum.begin()];
	vector<int> t(knum);
	vector<int> result(_len);
	for (int i = 0; i < knum; i++)
	{
		t[i] = count(_snum.begin(), _snum.end(), i+1);
	}
	for(int i=1; i<knum; i++)
	{
		t[i] += t[i - 1];
	}
	for (int i = _len-1; i >= 0; i--)
	{
		result[t[_snum[i]-1]-1] = _snum[i];
		t[_snum[i]-1 ]--;
	}
	_snum = result;
}