基数排序

一、基数排序的基本思想:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。

二、最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。
      最低位优先(Least Significant Digit first)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。

        #include "stdio.h"   

  1. #include "stdlib.h"   
  2. int main(void)  
  3. {  
  4.     int data[10]={73,22,93,43,55,14,28,65,39,81};  
  5.     int temp[10][10]={0};  
  6.     int order[10]={0};  
  7.     int i,j,k,n,lsd;  
  8.     k=0;n=1;  
  9.     printf("排序前: ");  
  10.     for (i=0;i<10;i++)  
  11.         printf("%d ",data[i]);  
  12.     putchar('/n');  
  13.     while (n<=10)  
  14.     {  
  15.         for (i=0;i<10;i++)  
  16.         {  
  17.             lsd=((data[i]/n)%10);  
  18.             temp[lsd][order[lsd]]=data[i];  
  19.             order[lsd]++;  
  20.         }  
  21.         printf("/n重新排列: ");  
  22.         for (i=0;i<10;i++)  
  23.         {  
  24.             if(order[i]!=0)  
  25.                 for (j=0;j<order[i];j++)  
  26.                 {  
  27.                     data[k]=temp[i][j];  
  28.                     printf("%d ",data[k]);  
  29.                     k++;  
  30.                 }  
  31.                 order[i]=0;  
  32.         }  
  33.         n*=10;  
  34.         k=0;  
  35.     }  
  36.     printf("/n");  
  37.     printf("/n排序后: ");  
  38.     for(i=0;i<10;i++)  
  39.         printf("%d ",data[i]);  
  40.     printf("/n");  
  41.     system("pause");  
  42.     return 0;  
  43. }  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值