排序算法-基数排序
2013-03-17 17:18
162 查看
基数排序:稳定排序算法
#include<iostream> #include<math.h> using namespace std; int a[]={1,255,8,6,25,47,14,35,58,75,96,158,657}; const int len=sizeof(a)/sizeof(int); int b[9][len]={0};//将b全部置0 void RadixSort(int a[]); //基数排序 void distributeElments(int a[],int b[9][len],int digits); void collectElments(int a[], int b[9][len]); int numOfDigits(int a[]); void zeroBucket(int b[9][len]); //将b数组中的全部元素置0 void RadixSort(int a[]) { int digits=numOfDigits(a); for(int i=1; i<=digits; i++) { distributeElments(a,b,i); collectElments(a,b); if(i!=digits) zeroBucket(b); } } int numOfDigits(int a[]) { int largest=0; for(int i=0; i<len; i++) //获取最大值 if(a[i]>largest) largest=a[i]; int digits=0; //digits为最大值的位数 while(largest) { digits++; largest/=10; } return digits; } void distributeElments(int a[],int b[9][len],int digits) { int divisor=10; //除数 for(int i=1; i<digits; i++) divisor*=10; for(int j=0; j<len; j++) { int numOfDigist=(a[j]%divisor-a[j]%(divisor/10))/(divisor/10); /* int numOfDigist; if(digits==1) numOfDigist=a[j]%divisor; else numOfDigist=a[j]/pow(divisor,digits-1); */ //numOfDigits为相应的(divisor/10)位的值,如当divisor=10时,求的是个位数 int num = ++b[numOfDigist][0];//用b中第一列的元素来储存每行中元素的个数 b[numOfDigist][num]=a[j]; } } void collectElments(int a[], int b[9][len]) { int k=0; for(int i=0; i<=9; i++) for(int j=1; j<=b[i][0]; j++) a[k++]=b[i][j]; } void zeroBucket(int b[][len]) { for(int i=0; i<9; i++) for(int j=0; j<len; j++) b[i][j]=0; } int main() { cout<<"原始数组:"; for(int i=0; i<len; i++) cout<<a[i]<<","; cout<<endl; RadixSort(a); cout<<"排序后数组:"; for( i=0; i<len; i++) cout<<a[i]<<","; cout<<endl; return 0; }
相关文章推荐
- 排序算法(4):基数排序
- 排序算法系列:基数排序(Radix sort)(C语言)
- 排序算法---基数排序
- 排序算法-基数排序
- 排序算法之——基数排序(Java实现)
- 排序算法----分配排序(箱排序,基数排序以及各种排序比较)
- 排序算法之计数&基数排序
- 常见的的五类排序算法(插入,选择,交换,归并,基数排序)。
- 排序算法-----基数排序
- 八种常见排序算法:插入、冒泡、选择、希尔、归并、快排、堆排序、基数排序
- 排序算法——基数排序
- [034]八大排序算法详解——基数排序
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 排序算法(八)——基数排序
- 【转】排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法(十一) 基数排序
- python语言小程序——排序算法3(基数排序)
- 排序算法——基数排序(桶式排序)
- 八种常见排序算法:插入、冒泡、选择、希尔、归并、快排、堆排序、基数排序
- 排序算法——基数排序