今天看了算法导论的排序,看到了一个计数排序,开始感觉很容易实现,后来思路写代码才发现不是那么容易。
有些事情需要自己去做才发现不是那么容易。
思想: 这个算法需要三个数组,数组a保存数组的元素,b保存输出的序列,c数组呢 就是保存小于或者等于对应下标的元素的个数。
好吧 ,直接贴代码吧。
#include<iostream>
using namespace std;
int main()
{
int a[100],c[100],b[100];//以此存放输入的数,<这个数的个数,输出序列
int i,n,k;
cout<<"输入数值的范围:";
cin>>k;
for(i=0;i<=k;i++)
c[i]=0;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
c[a[i]]=c[a[i]]+1;//计算值为a[i]的个数
for(i=1;i<=k;i++)
c[i]=c[i]+c[i-1];//计算小于等于这个数的个数
for(i=n;i>=1;i--){
b[c[a[i]]]=a[i];
c[a[i]]=c[a[i]]-1;
}
for(i=1;i<=n;i++)
cout<<b[i]<<"->";
cout<<endl;
return 0;
}