//计数排序假设n个输入元素中的每一个都是在0到k区间内的一个整数,其中k为某个整数。
#include<iostream>
using namespace std;
int* countingSort(int *A,int *B,int ASize)
{
int maxKey = -65535;
for(int i=0;i<ASize;++i)
{
B[i] = 0;
if(A[i]>maxKey)
maxKey = A[i]; //寻找A中最大值,开辟C空间
}
int *C = new int[maxKey+1]; //提供临时存储空间
for(int i=0;i<maxKey+1;++i)
C[i] = 0;
for(int i=0;i<ASize;++i)
++C[A[i]];
for(int i=1;i<maxKey+1;++i)
C[i] += C[i-1];
for(int i=ASize-1;i>=0;--i)
{
B[C[A[i]]-1] = A[i];
--C[A[i]];
}
delete []C;
return B;
}
void print(int *a,int num)
{
for(int i=0;i<num;++i)
cout<<a[i]<<ends;
cout<<endl;
}
int main()
{
int A[] = {5,0,3,2,7,6,7,1};
//int A[] = {5,4,3,2,8,6,7,1};
int num = sizeof(A)/sizeof(A[0]);
int*B = new int [num]; //存放排序的输出
print(countingSort(A,B,num),num);
delete []B;
return 0;
}
计数排序为线性时间排序,元素之间没有比较过程。
计数排序
最新推荐文章于 2023-08-05 19:04:02 发布