[算法] 基数排序

参考: http://baike.baidu.com/view/1170573.htm

跟桶排序差不多,理解起来还行写起来难度很大(自己不会写),才发现桶排序也可以用2维数组来解决,

下面代码哪位大神写的,写的很好

int data[10]={73,22,93,43,55,14,28,65,39,81};
        int temp[10][10]={0};//2维数组准备存放位数一样的数
        int order[10]={0};
        int i,j,k,n,lsd;
        k=0;n=1;
        printf("\n排序前: ");
        for (i=0;i<10;i++) printf("%d ",data[i]);
        putchar('\n');
        while (n<=10){
            for (i=0;i<10;i++){
                lsd=((data[i]/n)%10);              //n 第一次的时候 lsd是各位数,n 第二次的时候lsd是十位数,外层循环走两遍
                temp[lsd][order[lsd]]=data[i]; //当lsd相同的时候,通过order[lsd]++来存放不同的地方
                order[lsd]++;                          
            }
            printf("\n重新排列: ");
            for (i=0;i<10;i++){
                if(order[i]!=0)
                    for (j=0;j<order[i];j++){    //2维数组循环
                        data[k]=temp[i][j];
                        printf("%d ",data[k]);
                        k++;
                    }
                order[i]=0;
            }
            n*=10;
            k=0;
        }
        putchar('\n');
        printf("\n排序后: ");
        for (i=0;i<10;i++) printf("%d ",data[i]);

 

    

 

posted @ 2013-03-20 21:14  金建彤  阅读(174)  评论(0编辑  收藏  举报