排序算法---基数排序

来源:互联网 发布:wap办公软件 编辑:程序博客网 时间:2024/05/16 15:18

基数排序的主要思路是,将所有待比较数值(注意,必须是正整数)统一为同样的数位长度,数位较短的数前面补零. 然后, 从最低位开始, 依次进行一次稳定排序

比如这样一个数列排序: 342 58 576 356, 以下描述演示了具体的排序过程(红色字体表示正在排序的数位)

第一次排序(个位):

3 4 2

5 7 6

3 5 6

0 5 8

第二次排序(十位):

4 2

5 6

5 8

7 6

第三次排序(百位):

0 5 8

3 4 2

3 5 6

5 7 6

结果: 58 342 356 576

基本排序思想已搞定,可实现起来还是会有些许困难。

先看C语言代码:


#include <stdio.h>int lengthOfNnm(int n){if(n>=0&&n<10) {return 1;}else{int m = 0;while(n>=1){n=n/10;m++;}return m;}}int getKey(int n,int index){//获取第index 位上的数值switch (index){case 1:n=n%10;break;case 2:n=(n%100)/10;break;case 3:n=(n%1000)/100;break;//。。。此次测试 3个足矣 default:n=-1;break;}return n;}void sort(int v[] ,int index){int temp[8];int counts[10];for(int i = 0;i<10;i++){//初始化操作counts[i] = 0;}for(int i = 0;i<8;i++){//对 indx 位计数counts[ getKey(v[i],index) ] ++;}for(int i = 1;i<10;i++){//累加操作counts[i]+= counts[i-1];}for(int i = 8-1 ;i>=0;i--){//从左端开始复制记录int j = getKey(v[i],index) ;temp[ counts[j] - 1 ] = v[i];counts[j]--;}for(int i = 0;i<8;i++){v[i] = temp[i];}}int main(int argc, char *argv[]){int a[]={659,248,175,198,886,23,237,560};int max = a[0];for(int i = 0;i<8;i++){printf("%d   ",a[i]);if(a[i] > max){max = a[i];}}printf("\n");int times = lengthOfNnm(max);for(int i = 1;i<=times;i++){//最大数为几位则循环几次sort(a,i);}for(int i = 0;i<8;i++){printf("%d   ",a[i]);}printf("\n");return 0;}





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩的咪咪头没有突出来怎么办 手被竹子刺了肿了怎么办 紫竹刚栽叶子发枯怎么办能活吗 移栽大田的水稻过施了氮肥怎么办 股骨术后六十天有小量骨痂怎么办 被桃树上的蜂蜜咬了怎么办 照片回收站密码找不回来了怎么办 扣扣空间照片回收站密码忘了怎么办 我眼睛近视了不想戴眼镜怎么办 微信聊天对方只回一个字怎么办 大学室友都不是自己喜欢的人怎么办 超轻粘土粘在衣服上怎么办 粽子昨晚煮好今日发现不够熟怎么办 5岁宝宝左眼轻微散光怎么办光 孩子总吸鼻子但没有鼻涕怎么办 纹完眼线眼睛磨的很难受怎么办 我的脸型眼睛好看牙不好看怎么办 陌陌当日打招呼人数已达上限怎么办 新生婴儿白天睡觉晚上不睡怎么办 被有翅膀的蚂蚁咬了怎么办 被带翅膀的蚂蚁蛰了怎么办 被长翅膀的蚂蚁咬了怎么办 宝宝被带翅膀的蚂蚁咬了怎么办 新的小白鞋鞋子有点夹脚怎么办 单反快门按不下去里面响怎么办 在上海动漫城游戏厅里输了钱怎么办 电缝纫机扎快了上线有套那是怎么办 老式缝纫机底线总夹梭子上怎么办 两个月宝宝脸一边大一边小怎么办 炒股入金10万亏3万怎么办 如果一支股票有好几个庄家怎么办 浦发信用卡查询密码被锁定怎么办 浦发信用卡输错密码被锁定怎么办 浦发手机银行查询密码锁定怎么办 宝宝吃母乳没吃饱就睡着了怎么办 量柱画线不是方屏电脑怎么办 夏天卧室开空调太干了怎么办 健身房锻炼手臂抻的肌肉疼怎么办 人累了可以休息 心累了怎么办 上来两天班感觉不想做了怎么办 休产假的时候公司解散了怎么办