//基数排序-->多关键字的排序//时间复杂度:O(d*n) 空间复杂度:O(n) 稳定intGetMaxDigits(int* arr,int len){int maxValue = arr[0];for(int i =0; i < len;++i){if(arr[i]> maxValue){
maxValue = arr[i];}}//计算最大的位数 12345int digits =0;while(maxValue){
digits++;
maxValue /=10;}return digits;}intGetDigitsValue(int value,int digits){while(digits){
value /=10;
digits--;}return value %10;}voidRadixSort(int* arr,int len){//1.获取所有数据中最大的关键字的个数int maxDigits =GetMaxDigits(arr, len);//2.申请关键字范围个数的队列 0---9 十个队列 每个队列的长度就是所有数据个数len
SqQueue que[10];for(int i =0; i <10;++i){InitQueue(&que[i], len +1);}//3.循环根据各关键字将数据依次存储到对应的序列中,最后再将队列依次输出for(int i =0; i < maxDigits;++i){//3.1将所有的数据依次存储在对应队列中for(int j =0; i < len;++j){int digValue =GetDigitsValue(arr[j], i);PushQueue(&que[digValue], arr[j]);}//3.2将队列中的所有数据依次输出到arr中int index =0;for(int k =0; k <10;++k){while(!EmptyQueue(&que[k])){PopQueue(&que[k],&arr[index]);
index++;}}}//释放所有的队列for(int i =0; i <10;++i){DestoryQueue(&que[i]);}}
9.主函数
intmain(){srand((unsignedint)(time(NULL)*time(NULL)));int arr[LEN];for(int i =0; i < LEN;++i){
arr[i]=rand()%100;printf("%d ", arr[i]);}printf("\n");//BubbleSort(arr, LEN);//SelectSort(arr, LEN);//InsertSort(arr, LEN);// HeapSort(arr, LEN);// ShellSort(arr, LEN);QuickSort(arr, LEN);for(int i =0; i < LEN;++i){printf("%d ", arr[i]);}printf("\n");return0;}