排序算法C++&&Python实现---基数排序
来源:互联网 发布:域名怎么和空间绑定 编辑:程序博客网 时间:2024/05/19 14:38
本文将介绍基数排序算法的基本思想,并附上C++和Python实现的源代码。
- 基数排序的基本思想:
我是这样理解基数的:任何多位数都是有个位、十位、百位。。。构成的,那么其中的个位、十位、百位等的数字就可称为该数据的基数。从而,我们可以依次根据基数的大小来判断数据的大小。比如:先判断数据的个位数,将它们按个位数的大小从大到小依次排列起来,然后在依次比较十位数,依次类推,直至比较完数据的所有位数。 - C++实现:
//打印排序结果函数void Print(int a[],int n,int i=0){ //cout<<i<<endl; cout<<"排序后的结果为:"<<endl; for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl;}//基数排序int maxbit(int a[],int n) //求待排序数组中数据最大位数{ int d=0,maxValue=a[0]; for(int i=1;i<n;i++) { if(a[i]>maxValue) maxValue=a[i]; } while(maxValue>0) { maxValue/=10; d++; } return d;}void radixSort(int a[],int n){ //d为待排序数列中所有数据的最大位数 //radix为取位数参数,m为当前取的数据位数,如第一位(个位)、第二位(十位)等 int d=maxbit(a,n),radix=1,m=1; int tmp[9]; //中间数组 int count[10]; //0-9十个数字的个数 while(m<=d) { for(int i=0;i<10;i++) count[i]=0; //每次排序前将桶清零 for(int i=0;i<n;i++) { int k=(a[i]/radix)%10; count[k]++; //统计第k个桶中的数据个数 } for(int i=1;i<10;i++) count[i]=count[i-1]+count[i]; //统计在count[i]之前所有的数据个数 for(int j=n-1;j>=0;j--) { int s=(a[j]/radix)%10; tmp[count[s]-1]=a[j]; //将待排序数据放入正确位置 count[s]--; //剔除已放置位置 } for(int i=0;i<n;i++) { a[i]=tmp[i]; //对排完的数组继续排序 } radix*=10; //取下一位数据 m++; //位数加1 } Print(a,n);}
3.Python实现:
'''输出排序结果函数'''def Print(ddata): n=len(ddata) for i in range(n): print ddata[i], #其中","为了不让其输出默认的换行符'''基数排序'''def maxRadix(data,n): #获取数据最大位数 d=0 maxValue=max(data) while(maxValue>0): maxValue=maxValue/10 d+=1 return ddef RadixSort(data,n): d=maxRadix(data,n) RadData=zeros(n) rad=1 #位标志,个位为1,十位为10。。。 i=1 #数据位数标志 while(i<=d): #循环d次 count=zeros(10) #每个桶中数据个数,每次循环开始清零 for j in range(n): k=(data[j]/rad)%10 count[k]+=1 #统计个数 for m in range(1,10): count[m]+=count[m-1] #计算相应位数据个数 for l in range(n)[::-1]: kk=(data[l]/rad)%10 RadData[count[kk]-1]=data[l] count[kk]-=1 for ii in range(n): data[ii]=int(RadData[ii]) rad*=10 i+=1 Print(data)
阅读全文
0 0
- 排序算法C++&&Python实现---基数排序
- 排序算法 - 基数排序(C++)
- 【排序算法】基数排序(java实现)
- python实现计数排序、桶排序、基数排序
- 排序算法c语言描述---基数排序
- 排序算法C++&&Python实现---冒泡排序
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- Java实现-高效排序算法之基数排序
- 基数排序与桶排序C实现
- 排序算法-基数排序_基数排序
- 数据结构算法之排序系列Java、C源码实现(8)--基数排序
- 插入排序算法python和c实现
- 浅谈排序算法实现 (计数排序、基数排序)
- 排序算法(三)_计数排序、基数排序的Java实现
- 排序算法之基数排序
- 【排序算法】基数排序(RadixSort)
- 排序算法-基数排序
- 自定义规则比较器
- 微信公众平台 redirect_uri参数错误解决方法
- Spring获取bean的几种方式
- ARM NEON 编程系列7——NEON gcc编译器intrinsics函数对应的汇编指令
- Multi-university 第九场 经验总结
- 排序算法C++&&Python实现---基数排序
- Spring框架学习(一)
- 网络营销实战课-微信实操
- 一个DOM操作的题目
- 排序算法练习
- Material Design整理(三)——ToolBar
- 《大道至简》读后感
- 浅解多线程
- 5 树