标签:i++ main int 排序 循环 数组 void pre iostream
//中心思想,按照低位先排序,然后收集,再按照高位排序,然后再收集,
//以此类推,直到最高位,是稳定算法,效率很高,复杂度是O(n㏒(r)m),r为采取的基数
//m为堆数,但是只能用在整数中,且需要一定的辅助空间
//下面是代码:
#include<iostream>
using namespace std;
//寻找数组中最大数的位数作为基数排序循环次数
int KeySize(int a[],int n)
{
int key=1;
for(int i=0;i<n;i++)
{
int temp = 1;
int r=10;
while(a[i]/r>0)
{
temp++;
r*=10;
}
key=(temp>key)?temp:key;
}
return key;
}
//基数排序
void RadixSort(int a[],int n)
{
int key=KeySize(a,n);
int bucket[10][10]={0};
int order[10]={0};
for(int r=1;key>0;key--,r*=10)
{
for(int i=0;i<n;i++)
{
int lsd =(a[i]/r)%10;
bucket[lsd][order[lsd]++]=a[i];
}
int k=0;
for(int i=0;i<10;i++)
{
if(order[i]!=0)
{
for(int j=0;j<order[i];j++)
a[k++]=bucket[i][j];
}
order[i]=0;
}
}
}
int main()
{
int arr[10]={
223,534,654,876,345,123,543,675,435,67
};
RadixSort(arr,10);
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
return 0;
}
标签:i++ main int 排序 循环 数组 void pre iostream
原文地址:http://www.cnblogs.com/enyala/p/7696501.html