基数排序
来源:互联网 发布:3d房屋设计软件 编辑:程序博客网 时间:2024/06/04 20:12
#include<math.h>testBS(){inta[]={2,343,342,1,123,43,4343,433,687,654,3};int*a_p=a;//计算数组长度intsize=sizeof(a)/sizeof(int);//基数排序bucketSort3(a_p,size);//打印排序后结果inti;for(i=0;i<size;i++){printf("%d\n",a[i]);}intt;scanf("%d",t);}//基数排序voidbucketSort3(int*p,intn){//获取数组中的最大数intmaxNum=findMaxNum(p,n);//获取最大数的位数,次数也是再分配的次数。intloopTimes=getLoopTimes(maxNum);inti;//对每一位进行桶分配for(i=1;i<=loopTimes;i++){sort2(p,n,i);}}//获取数字的位数intgetLoopTimes(intnum){intcount=1;inttemp=num/10;while(temp!=0){count++;temp=temp/10;}returncount;}//查询数组中的最大数intfindMaxNum(int*p,intn){inti;intmax=0;for(i=0;i<n;i++){if(*(p+i)>max){max=*(p+i);}}returnmax;}//将数字分配到各自的桶中,然后按照桶的顺序输出排序结果voidsort2(int*p,intn,intloop){//建立一组桶此处的20是预设的根据实际数情况修改intbuckets[10][20]={};//求桶的index的除数//如798个位桶index=(798/1)%10=8//十位桶index=(798/10)%10=9//百位桶index=(798/100)%10=7//tempNum为上式中的1、10、100inttempNum=(int)pow(10,loop-1);inti,j;for(i=0;i<n;i++){introw_index=(*(p+i)/tempNum)%10;for(j=0;j<20;j++){if(buckets[row_index][j]==NULL){buckets[row_index][j]=*(p+i);break;}}}//将桶中的数,倒回到原有数组中intk=0;for(i=0;i<10;i++){for(j=0;j<20;j++){if(buckets[i][j]!=NULL){*(p+k)=buckets[i][j];buckets[i][j]=NULL;k++;}}}}
0 0
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 编写高效的C程序与C代码优化
- jquery 1.6以后attr对于checked不起作用,其替代方法为prop
- Factorial Trailing Zeroes
- 马士兵_JAVA自学之路(为那些目标模糊的码农们)
- 剑指offer 面试题42 翻转单词顺序 | 左旋转字符串
- 基数排序
- 使用DOS编译运行多个java程序
- linux TCP编程处理网线拔掉
- 纯javascript验证,100行超精简代码。
- 《更好的解释(数学篇)》——第六章 复数运算
- 关于动态创建对话框以及动态创建控件
- MySql简要笔记
- codeforces 498 d Traffic Jams in the Land
- Web Server 架构浅谈-Simple Event-Driven Achitecture