自写的C语言基数排序有点问题,请大家帮忙看看
代码没有完全完成,只写了第一趟排序,还需要归并再排序,最后还得释放内存,不过先不管这些,因为第一趟就出问题了:不知为什么,输出的时候只会输出根结点中的数据,不会输出具有相同基数的数(也就是代码中next指向的数据)。以下是代码(有注释),请帮忙看看,不胜感激!#include <stdio.h>
#include<stdlib.h>
#define size 20
typedef struct radix{
int num; /*存储待排序的数字*/
int lc; /*计数器*/
struct radix *next; /*指向相同基数的数*/
}radix;
radix arr[10]; /*arr[i]存储基数为i的数(0<=i<=9)*/
int basesort(int data[],int n){ /*data为待排序数组,n为数组元素的个数*/
int i,j,k,d,lsd; /*d用来判别最大有效位,lsd记录基数(从个位起)*/
for(i=1,j=0;i<n;i++)
if(data[i]>data[j]) j=i;
k=data[j];
for(d=1;k/10>=1;k/=10,d*=10);
k=1;
while(k<=d) {
for(i=0;i<n;i++){
lsd=((data[i]/k)%10); /*计算基数*/
panduan(&(arr[lsd]),data[i]); /*根据基数不同存入不同的数组元素内*/
}
printf("\n重新排列: ");
for(i=0;i<10;i++) {
resort(&(arr[i]));
}
getchar();
k*=10;
}
}
void panduan(radix *p,int data){ /*相同基数判断:第一次存入根结点中,否则存入下一个链结点*/
if((p->lc)&&p)
crbase(p->next,data);
else
crbase(p,data);
}
int crbase(radix *p,int data){ /*执行数据存储*/
if(!p) p=(radix *)malloc(sizeof(radix));
p->num=data;p->lc++;
}
int resort(radix *p){ /*按顺序输出数据*/
if((p->lc)>0){
printf("%3d",p->num);p->lc--;
if(p->lc)
resort(p->next);
}
}
int main() {
int data[size],i;
srand(time(NULL));
for(i=0;i<size;i++)
data[i]=rand()%100;
printf("排序前:");
for(i=0;i<size;i++)
printf("%3d",data[i]);
printf("\n");
basesort(data,size);
}