基数排序是一种非比较型排序算法。它是通过依次对一个数的每一位来排序,最终来达到排序的目的。
比如数:73,22,93,43,55,14,28,65,39,81
对最低位排序后为:81,22,73,93,14,55,65,28,39
再对十位排序后:14 22 28 39 43 55 65 73 81 91
假设要排序的数中最大的数有d位,那么排序方法为
RADIX-SORT(A, d) for i←1 to d do use a stable sort to sort array A on digit i
#include<iostream> #include <vector> using namespace std; void RADIX_SORT(int A[], int d) { //A,存放数的数组,d数组中最大数的位数 int MaxW=1; for(int i=1;i<d;i++) MaxW=MaxW*10; vector<vector<int>> Tmp(10);//用做箱 int n=1,lsd,k=0;//n,数组中,数的最大位数,lsd数的某一位大小, while (n<=MaxW) { for (int i=0;i<d;i++) { lsd=(A[i]/n)%10;//求某一位数 Tmp[lsd].push_back(A[i]); } for (int i=0;i<10;i++) { if (!Tmp[i].empty()) { for (vector<int>::iterator iter=Tmp[i].begin();iter!=Tmp[i].end();iter++) { A[k]=*iter; k++; } Tmp[i].clear();//清空 } } n=n*10; k=0; } } int main() { int A[10]={73,22,93,43,55,14,28,65,39,81}; RADIX_SORT(A, 2); for(int i=0;i<10;i++) cout<<A[i]<<" "; }