#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int getmaindigit(int* arr,int n)
{
int base=10;
int digit=1;
for(int i=0;i<n;i++)
{
while(arr[i]>=base){
digit++;
base*=10;
}
}
return digit;
}
int moto(int* arr,int n,int m){
int tmp[10];
int start[10];
int coust[10];
int digit = 1;
int base = 10;
for(int r=0;r<m;r++)
{
memset(tmp,0,sizeof(tmp));
memset(coust,0,sizeof(coust));
memset(start,0,sizeof(start));
for(int i=0;i<n;i++)
{
int k=arr[i]/digit%base;
coust[k]++;
}
for(int i=1;i<n;i++)
{
start[i]=start[i-1]+coust[i-1];
}
for(int i=0;i<n;i++)
{
tmp[start[arr[i]/digit%base]++]=arr[i];
}
memcpy(arr,tmp,n*sizeof(int));
digit*=10;
}
}
int main()
{
int arr[10]={123,456,789,4,45,64,89,56,23,10};
moto(arr,10,getmaindigit(arr,10));
for(int i=0;i<10;i++)
{
cout<<arr[i]<<endl;
}
return 0;
}
基数排序
最新推荐文章于 2023-04-13 11:24:26 发布