// 获取最大数据的位数intGetDigit(int*arr,int len){int max = arr[0];for(int i =0; i < len;++i){if(max < arr[i]) max = arr[i];}int digit =0;while(max)// max 1234 123 12 1 0{
digit++;
max /=10;}return digit;}// 时间复杂度: O(d*n)// 空间复杂度: O(n)// 稳定性: 稳定// 获取一个数据相应位数上的值intGetRadix(int val,int digit){// val 1234int radix = val %10;// 4while(digit){
val /=10;// 123
radix = val %10;// 3
digit--;}return radix;}voidRadixSort(int*arr,int len){int maxDigit =GetDigit(arr, len);
ListQue que[10];for(int i =0; i <10;++i){InitListQue(&que[i]);}// 根据不同的位数,处理整个数据for(int i =0; i < maxDigit;++i){// 将arr中的所有数据取其i这个位数的值, 并且插入到相应值的队列中for(int j =0; j < len;++j){int radix =GetRadix(arr[j], i);Push(&que[radix], arr[j]);}// 将所有队列按照从前到后的顺序把值全部出到arr中。int index =0;for(int k =0; k <10;++k){while(!Empty(&que[k])){GetHead(&que[k],&arr[index++]);Pop(&que[k]);}}}for(int i =0; i <10;++i){DestroyListQue(&que[i]);}}