#include<iomanip>
#include<iostream>
using namespace std;
//显示函数
void Display(int* A,int length)
{
cout<<endl<<endl;
for(int i=0;i<length;i++)
{
cout<<setw(4)<<A[i];
if((i+1)%10==0)
cout<<endl;
}
cout<<endl<<endl;
}
//计数排序
//A[0...length-1]原始数组
//B[0...length-1]排序后的数组
//max为数组A[0...length-1]中的最大值
void CountingSort(int *A,int *B,int length,int max)
{
int *C;
int i;
C = new int[max+1];
//初始化
for(i=0;i<max+1;++i)
C[i]=0;
//计算出现次数
for(i=0;i<length;++i)
C[A[i]] += 1;
for(i=1;i<=max;++i)
C[i] = C[i]+C[i-1];
for(i=length-1;i>=0;--i)
{
B[C[A[i]]-1] = A[i];
C[A[i]] -= 1;
}
}
int main()
{
int Count,max;
cout<<"请输入数组的元素个数及元素最大值: ";
cin>>Count>>max;
int *A;
int *B;
A = new int[Count];
B = new int[Count];
srand((unsigned)time(NULL));
for(int i=0;i<Count;++i)
A[i]=rand()%max;
cout<<"\n\t\t排序前..."<<endl;
Display(A,Count);
CountingSort(A,B,Count,max);
cout<<"\n\t\t排序后..."<<endl;
Display(B,Count);
delete A;
delete B;
return 0;
}
计数排序
最新推荐文章于 2024-11-16 14:38:00 发布