计数排序(桶排)java实现

计数排序适用于整数排序,且数字相对集中的数组
排序步骤:
1.先找出数组a([2,9,3,5,6,5])中的最大值max(9)和最小值min(2)
2.创建一个大小是max-min+1(8)大小的数组c(加1是因为9-2可能有8个不同的数)用于存放a中每个数出现的次数((c的下标+min)就表示a中的某个数,在该下标位置存放的就是它的出现次数)
3.遍历数组a,找出min+i出现的次数,b[i]中存放min+i这个数出现的次数(c=[1,1,0,2,1,0,0,1])。
4.将a数组按照c数组的顺序进行重新排序
上代码

    public static void countSort(int[] a) {
      int max=-10000000;
      int min=10000000;  
     

 //找出数组a的最大值和最小值
  for(int i=0;i<a.length;i++) {
   if(a[i]>max) {
    max=a[i];
   }
   if(a[i]<min) {
    min=a[i];
   } 
  }
  int[] c=new int[max-min+1];
  //将a中每个数num的出现的次数存放在数组c中
  //c的下标+min表示该数num
   

      for(int i=0;i<c.length;i++) {
          int temp=min+i;
          int count=0;
          for(int j=0;j<a.length;j++) {
           if(a[j]==temp) {
            count++;
           }
          }
          c[i]=count; 
         }

     //最后一步将数组a按照c重新排序
     int k=0;
     for(int m=0;m<c.length;m++) {
      for(int n=0;n<c[m];n++) {
       a[k]=min+m;
       k++;
      }
     }     
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值