#include<iostream>
using namespace std;
//记数排序
//此是一个非比较的排序,故时间复杂度为n
//典型的用空间换时间
/*
*记数排序的思想:
*假设待排序的数组为A,开一个与A大小相等的数组B
*记数排序,规定待排序的数都小于k,那么开一个大小为k的数组C,
*数组C记录各个大小的数出现的次数
*/
void CountSort(int *a,int *b,int *c)
{
for(int i=0;i<8;i++)
{
c[i]=0;
}
for(int j=0;j<7;j++)
{
c[a[j]]++;
}
for(int m=1;m<8;m++)
{
c[m]=c[m]+c[m-1];
}
for(int n=6;n>=0;n--)
{
b[c[a[n]]-1]=a[n];
c[a[n]]--;
}
}
int main()
{
int A[]={1,5,2,3,7,6,1};
int B[7],C[8];
CountSort(A,B,C);
for(int i=0;i<7;i++)
{
cout<<B[i]<<" ";
}
system("pause");
return 0;
}
线性排序之记数排序
最新推荐文章于 2023-05-18 11:08:02 发布