|
|
|
@ -0,0 +1,68 @@
|
|
|
|
|
#include<bits/stdc++.h>
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
int temp[100];
|
|
|
|
|
int bucket[10];
|
|
|
|
|
|
|
|
|
|
int maxBit(int data[],int n)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>n<EFBFBD><6E>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
int maxData = data[0];
|
|
|
|
|
for(int i=1;i<n;i++)
|
|
|
|
|
{
|
|
|
|
|
if(maxData<data[i])
|
|
|
|
|
maxData=data[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ<EFBFBD><CEBB><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD>
|
|
|
|
|
int d=1; //d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ȼ<EFBFBD><C8BB>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1λ<31><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>d<EFBFBD><64>ʼ<EFBFBD><CABC>Ϊ1
|
|
|
|
|
while(maxData>=10) //<2F><><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>/10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
{
|
|
|
|
|
maxData/=10;
|
|
|
|
|
d++;
|
|
|
|
|
}
|
|
|
|
|
return d;
|
|
|
|
|
}
|
|
|
|
|
void radixsort(int data[],int n) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
int d = maxBit(data,n); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
int i,j,k;
|
|
|
|
|
int radix = 1;
|
|
|
|
|
for(i=1;i<=d;i++) //<2F><><EFBFBD><EFBFBD>d<EFBFBD><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
for(j=0;j<10;j++) //ÿ<>η<EFBFBD><CEB7><EFBFBD>ǰ<EFBFBD><C7B0>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
bucket[j]=0;
|
|
|
|
|
}
|
|
|
|
|
for(j=0;j<n;j++) //ͳ<><CDB3>ÿ<EFBFBD><C3BF>Ͱ<EFBFBD><CDB0>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
k=(data[j]/radix)%10;
|
|
|
|
|
bucket[k]++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>1
|
|
|
|
|
for(j = 1; j < 10; j++)
|
|
|
|
|
bucket[j] = bucket[j - 1] + bucket[j];
|
|
|
|
|
|
|
|
|
|
//<2F>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD><EFBFBD>2
|
|
|
|
|
for(j = n-1; j>=0; j--)
|
|
|
|
|
{
|
|
|
|
|
k = (data[j] / radix) % 10;
|
|
|
|
|
temp[bucket[k] - 1] = data[j];
|
|
|
|
|
bucket[k]--;
|
|
|
|
|
}
|
|
|
|
|
for(j = 0; j < n; j++) //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8>Ƶ<EFBFBD>data<74><61>
|
|
|
|
|
data[j] = temp[j];
|
|
|
|
|
|
|
|
|
|
radix = radix * 10; //<2F><>λ -<2D><> ʮλ -<2D><><EFBFBD><EFBFBD>λ -<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
|
{
|
|
|
|
|
int a[4]={2,1,34,4};
|
|
|
|
|
radixsort(a,4); //aʮ<61><CAAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>4<EFBFBD><34>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD>
|
|
|
|
|
for(int i=0;i<4;i++)
|
|
|
|
|
cout<<temp[i]<<" ";
|
|
|
|
|
return 0;
|
|
|
|
|
}
|