您的位置:首页 > 其它

基数排序

2010-08-18 15:08 197 查看
本来应该是上午应该更新的。。但是我们的csdn太忙,登录半天就是登录不上,所以,直到现在才更新。。闲话少说,还是正事为主。。

基数排序是古老打表的一种,是桶排序的特殊情况,在基数排序中,我们用到了计数排序的相关的知识,那么还是先说一下基数排序的大体思路,按我的理解,就是排序就是从个位数依次至最高位,根据各个位数上的大小不同分别排序,直至根据最高位上的各个数字的不同排序后,就是我们所得到的排序好的顺序,算法的重要性是按位排序要稳定,关于按位排序我们可以利用字符串的二维数组,或者采用我下边代码的计数排序,但是我下边代码的确定就是,我们数字各个位数的最大数字必须小于等于数字总数,或者总个数大于10,至于为什么,我想还是仔细我下边的计数排序的那个缺点之处,有改进的方法吗,当然,我们只需将下边的计数排序的代码进行修改,这个我再日后会尽量完善,因为我只想谈一下基数排序的思路,而不是完全的代码,下边的代码则足以表现基数排序的思路。。

C语言: Codee#12927
//题目:基数排序
//by 笨牛dashan
//完成时间: 2010.8
//完成状况:已完成。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
int n;
void padix_sort(int *a,int d)
{
int temp[MAX][MAX]={0};
int order[MAX]={0};
int i,j,lst;
int x=1,m=1;
for(i=1;i<d;i++)
{
x*=10;
}
while(m<=x)
{
int k=0;
for(i=0;i<n;i++)
{
lst=(a[i]/m)%10;
temp[lst][order[lst]]=a[i];//采用计数的方法存储
order[lst]++;
}
for(i=0;i<n;i++)
{
if(order[i]!=0)
{
for(j=0;j<order[i];j++,k++)
{
a[k]=temp[i][j];
}
}
order[i]=0;
}
k=0;
m*=10;
}

}
int main()
{
int a[100];//定义一个数组用于存储数字
while(printf("几个数啊??/n"),scanf("%d",&n))
{
int d;
int i;
printf("多少位啊??/n");
scanf("%d",&d);
printf("都是啥啊??/n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("排序之前是:/n");
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("/n");
padix_sort(a,d);
printf("排序之后是:/n");
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
putchar('/n');
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: