#include #include #include // 获取数组arr中最大值,arr-待排序的数组,len-数组arr的长度。 int arrmax(int *arr,unsigned int len) { int ii,imax; imax=arr[0]; for (ii=1;iiimax) imax=arr[ii]; return imax; } // 对数组arr按指数位进行排序。 // arr-待排序的数组,len-数组arr的长度。 // exp-排序指数,exp=1:按个位排序;exp=10:按十位排序;...... void _radixsort(int *arr,unsigned int len,unsigned int exp) { int ii; int result[len]; // 存放从桶中收集后数据的临时数组。 int buckets[10]={0}; // 初始化10个桶。 // 遍历arr,将数据出现的次数存储在buckets中。 for (ii=0;ii=0;ii--) { int iexp=(arr[ii]/exp)%10; result[buckets[iexp]-1]=arr[ii]; buckets[iexp]--; } // 将排序好的数组result复制到数组arr中。 memcpy(arr,result,len*sizeof(int)); } // 基数排序主函数,arr-待排序的数组,len-数组arr的长度。 void radixsort(int *arr,unsigned int len) { int imax=arrmax(arr,len); // 获取数组arr中的最大值。 int iexp; // 排序指数,iexp=1:按个位排序;iexp=10:按十位排序;...... // 从个位开始,对数组arr按指数位进行排序。 for (iexp=1;imax/iexp>0;iexp=iexp*10) { _radixsort(arr,len,iexp); int yy; printf("exp=%-5d ",iexp); for (yy=0;yy