您的位置:首页 > 其它

查找与排序:利用基数排序对0~100范围内数据实现排序

2014-01-17 01:06 357 查看
查找与排序:利用基数排序对0~100范围内数据实现排序
     数据结构实训。基数排序有什么用呢,效率又不出众~

     在排序过程中数字的数目是不变的。在把数字分类和收集的过程循环实现。

     细节+代码:

     #include<stdio.h>
#include<math.h>

struct re{ //用于放分类的数字的数组。
int b[20];
int count;
}key[20];

int N;

int get(int a,int n){ //取出相应数位上的数字。
int i,k,part;
k = a;
for(i = 0;i<=n-1;i++)
k = k/10;
part = k%10;
return part;

}

int sort(int a[],int j){ //把数字放到其数位对应的数字的数组里。
int i,self;
for(i = 0;i<=20;i++)
key[i].count = 0;
for(i = 0;i<=N-1;i++){
self = get(a[i],j);
key[self].b[key[self].count] = a[i];
key[self].count++;
}
return 0;
}

int together(int a[]){ //把分好类的数字按顺序放回一个数组里。
int g,j,i;
g = 0;
for(i = 0;i<=8;i++){
for(j = 0;j<=key[i].count-1;j++){
a[g] = key[i].b[j];
g++;
}
}
return 0;
}

int main(){
int i,a[200];
scanf("%d",&N); //数字的数量。
for(i = 0;i<=N-1;i++)
scanf("%d",&a[i]);
for(i = 0;i<=2;i++){
sort(a,i);
together(a);
}
for(i = 0;i<=N-1;i++) //排好序后输出。
printf("%d ",a[i]);
printf("\n");
return 0;
}

/* 测试案例:
*
* 输入:
* 10
* 100 23 24 56 76 78 89 23 45 65 29
* 输出:
* 23 23 24 45 56 65 65 76 78 100
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐