C语言数组实现低位优先法分配排序(LSD)代码如下:
#include<stdio.h> #include<math.h> #define N 10000 void LSD(int s[],int n,int digits_max)//自定义低位优先法分配排序函数,s为数组名,n为数组长度,digits_max为数组元素最大位数 { double i; for(i=0;i<digits_max;i++){ int j,k,t,l; for(j=1;j<n;j++){//对各位次分别利用直接插入排序 for(k=j-1;k>=0;k--){ if((s[j]/(int)pow(10,i)%10)>=(s[k]/(int)pow(10,i)%10))//按位数进行比较 break; } if(j!=k+1){ t=s[j]; for(l=j-1;l>=k+1;l--){ s[l+1]=s[l]; } s[k+1]=t; } } } } int main() { int s[N]; int n,i,digits_max; printf("请输入待排数组长度:\n"); scanf("%d",&n);//扫描数组长度 printf("请输入待排数组:\n"); for(i=0;i<n;i++) scanf("%d",&s[i]);//扫描数组 printf("请输入待排数组元素的最大位数:\n"); scanf("%d",&digits_max);//扫描数组元素的最大位数 LSD(s,n,digits_max);//将数组通过自定义的低位优先法分配排序函数进行排序 printf("排序结果如下:\n"); for(i=0;i<n;i++) printf("%d ",s[i]);//输出排序结果 return 0; }