#include<iostream>
using namespace std;
const int RADIX = 16;
void radixSort(int a[],int len)
{
//getMax 用于控制循环次数
int max=a[0];
for(int i=1;i!=len;i++)
{
if(a[i]>max) max=a[i];
}
int _module=RADIX;
while(max)
{
//使用计数排序
int *tin=new int[RADIX];
memset(tin,0,RADIX*sizeof(int));
for(int i=0;i!=len;i++)
{
tin[(a[i]%_module)/(_module/RADIX)]++;//a[i]%_module/(_module/10)取第*位数字
}
for(int i=1;i!=RADIX;i++)
{
tin[i]+=tin[i-1];
}
//bin保存计数排序后的结果
int *bin=new int[len];
for(int i=len-1;i>=0;i--)
{
bin[tin[(a[i]%_module)/(_module/RADIX)]-1]=a[i];
//tin[(a[i]%_module)/(_module/10)]-1为此轮排序a[i]应处位置
--tin[(a[i]%_module)/(_module/RADIX)];
}
memcpy(a,bin,len*sizeof(int));
_module*=RADIX;
max/=RADIX;
}
}
int main()
{
int a[]={278,109,63,930,589,184,505,269,883};
int len=(sizeof(a)/sizeof(*a));
radixSort(a,len);
for(int i=0;i!=len;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
基数排序
最新推荐文章于 2019-08-13 14:01:15 发布