标签: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