您的位置:首页 > 其它

计数排序

2016-07-14 14:03 204 查看
#include<iostream>
#include<cstdlib>
using namespace std;
void CountingSort(int *a,int n)
{
int max=a[0],min=a[0];
for(int i=0; i<n; i++)//找到最大值
{
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
int temp=max-min+1;//计算跨度
int b[temp]= {0};
for(int i=0; i<n; i++) //统计数组中每个值为a[i]的元素出现的次数
b[a[i]-min]++;
int t=0;
for(int i=0; i<temp; i++) //计算前边一共有多少数
{
if(b[i]!=0)
{
b[i]+=t;
t=b[i];
}
}
for(int i=0; i<n; i++) //把a中所有数标记为max+1,max+1代表没有数据
a[i]=max+1;
for(int i=0; i<temp; i++) //将数放入a
if(b[i]!=0)
a[b[i]-1]=i+min;
for(int i=n-1; i>=0; i--) //把那些重复的数放进去
if(a[i]==max+1)
a[i]=a[i+1];
}
void print(int *a,int n)
{
for(int i=0; i<n; i++)
cout<<*(a+i)<<" ";
cout<<endl;
}
int main()
{
int a[10]= {15,11,14,19,16,13,17,18,12,10};
print(a,10);
CountingSort(a,10);
print(a,10);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: