算法导论—计数排序

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void countSort(vector<int> &vec,vector<int> &vecSort,int k)
{
	vector<int> c(k+1);
	int i;

	//make c[i] contain the number of elements equal to i
	for(i=0;i<vec.size();i++)
		c[vec[i]]++;

	for(i=1;i<k+1;i++)
		c[i]=c[i]+c[i-1];

	for(int j=vec.size()-1;j>=0;j--)
	{
		vecSort[c[vec[j]]-1]=vec[j];
		c[vec[j]]--;
	}

}

int main()
{
	vector<int> vec{2,5,3,0,2,3,0,3,7,8,99,12,3,4,1,0,7,67,34,57};
	vector<int> vecSort(vec.size());
	int k=*max_element(vec.begin(),vec.end());
	countSort(vec,vecSort,k);

	for(auto v:vecSort)
		cout<<v<<" ";
	cout<<endl;

}

你可能感兴趣的:(算法导论—计数排序)