基数排序
来源:互联网 发布:java导出图片 编辑:程序博客网 时间:2024/04/30 04:14
本来应该是上午应该更新的。。但是我们的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');
}
}
//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');
}
}
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 关于通用数据库的表的分页功能
- php中调用java类的方法
- Tomcat与Java Web开发技术详解 总结(1)
- 视频转成flv格式
- 函数对象和函数的区别
- 基数排序
- 必须知道的10个不常用HTML标签
- F#入门-第二章 F#基础-第九节 while循环
- Linux下使用C做简单的网络编程
- 生成ssh服务器密钥
- 【USACO Contest 】Holiday 2010 Bonus Competition, Problem 2: Rocks and Trees (rocks)
- Linux下mySQL命令大全
- 防止内存泄露 Linux下用Valgrind做检查
- Oracle&SQL,SQL的基础还是太薄弱了点