基数排序(Radix Sort)
- 平均时间复杂度:O(n×k)
- 最好情况:O(n×k)
- 最坏情况:O(n×k)
- 空间复杂度:O(n+k)
- 排序方式:外部
-
C++代码实现
int maxbit(vector<int>& arr) //辅助函数,求数据的最大位数{int res=0,maxVal=*max_element(arr.begin(), arr.end());while(maxVal){res++;maxVal/=10;}return res;}//基数排序void radixsort(vector<int>& arr){int offset=0,minVal=*min_element(arr.begin(), arr.end());if(minVal<0){offset=-minVal;for(auto& val:arr)val+=offset;}queue<int> barrel[10];int bit=maxbit(arr);int div=1,len=arr.size();for(int i=0;i<bit;i++){for(int j=0;j<len;j++){barrel[arr[j]/div%10].push(arr[j]);}vector<int>::iterator it=arr.begin();for(int k=0;k<10;k++){while(!barrel[k].empty()){*it=barrel[k].front();it++;barrel[k].pop();}}}if(minVal<0){offset=-minVal;for(auto& val:arr)val-=offset;}}
1. 算法步骤
- 将整数按位数切割成不同的数字,然后按每个位数分别计数排序。
- 重复1到排序序列中数字最大值的位数次数
2. 动图演示

