C语言实现常用排序算法——基数排序
#include<stdio.h> #include<math.h> #define SIZE 10 #define C_SIZE 20 /*行数稳定=10,切记!列数务必搞的大一些,避免出现放不下的情况*/ void radix_sort(int *p,int n,int step); void travel(int *p,int n); int get_max(int *p,int n); int get_digit(int x); void out_sort(int *p,int n); main() { int a[]= {8,7,83,4,39,85,5,9,32,80,97,61,2,38,48,74,26,514}; int *pa=a; int i; int n=sizeof(a)/sizeof(int); travel(pa,n); out_sort(pa,n); travel(pa,n); } void out_sort(int *p,int n) { int max_n=get_max(p,n); int loop=get_digit(max_n); int i; for(i=1; i<=loop; i++) { radix_sort(p,n,i); } } /*基数排序*/ void radix_sort(int *p,int n,int loop) { int b[SIZE][C_SIZE]= {0}; int i,j; int tmp =(int)pow(10,loop-1); for(i=0; i<n; i++) { int row_index = (*(p+i)/tmp)%10; for(j=0; j<C_SIZE; j++) { if(b[row_index][j] == 0) { b[row_index][j] = *(p+i); break; } } } int k=0; for(i=0; i<SIZE; i++) { for(j=0; j<C_SIZE; j++) { if(b[i][j]!= 0) { *(p+k)=b[i][j]; b[i][j]=0; k++; } } } } /*遍历数组*/ void travel(int *p,int n) { int i; for(i=0; i<n; i++) { printf("%d,",*(p+i)); } printf("\n"); } /*获取最大数字*/ int get_max(int *p,int n) { int i; int max_num=0; for(i=0; i<n; i++) { if(*(p+i)>max_num) { max_num=*(p+i); } } return max_num; } /*获取最大数字的位数*/ int get_digit(int x) { int count=1; int temp=x/10; while(temp!=0) { count++; temp=temp/10; } return count; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗