第8章 线性时间排序
8.2 计数排序
/*8.2 计数排序
*COUNTING-SORT
*/
#include<cstdlib>
#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
typedef vector<size_t>::iterator tvecIte;
size_t chktvIte(tvecIte iteB, tvecIte iteE)
{
if(iteB > iteE) {
cout<<"wrong with in iterator range!"<<endl;
exit(0);
}
return iteE-iteB;
}
void coutSort(vector<size_t> &tvec, tvecIte iteB, tvecIte iteE, size_t k)
{//k不小于tvec中最大的数
chktvIte(iteB, iteE);
//初始化为零
vector<size_t> tvecC(k+1, 0);
tvecIte ite, iteC;
//tvecC[i]中包含等于i的元素个数
for(ite=iteB; iteE != ite; ++ite)
++*(iteC = tvecC.begin() + *ite);
ite = iteB;
for(iteC = tvecC.begin(); tvecC.end() != iteC; ++iteC)
while((*iteC)-- > 0)
*ite++ = iteC - tvecC.begin();
}
int main()
{
size_t inData;
vector<size_t> tvec;
cout<<"input some natural numbers with end-of-file!"<<endl;
while(cin>>inData)
tvec.push_back(inData);
//输入的自然数不大于
coutSort(tvec, tvec.begin(), tvec.end(), 10);
for(tvecIte ite = tvec.begin(); tvec.end() != ite; ++ite)
cout<<setw(10)<<*ite;
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
算法导论CLRS 8.2 计数排序
最新推荐文章于 2022-04-17 16:39:06 发布