本来应该是上午应该更新的。。但是我们的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');
}
}