排序算法--计数排序(java)

排序算法--计数排序(java)

1、计数排序的思路对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。然后根据这个数将x直接存放到最终的输出序列的正确位置上。
2、算法思路
设需要排序的序列 a=[43,37,42,44,38,42,44]
首先找出序列a中的最大值max和最小值min,对其做差记为k;
定义数组c[k+1](下标0--k分别表示与a序列中最小值的差值),初始值为0,最终是用来表示比a[i]小的元素的个数。
(1)为数组c赋值,计算a中各元素出现的次数:对a中序列循环,c[a[i]-min]=c[a[i]-min]+1(此时c={1,1,0,0,0,2,1,2})
(2)再次计算数组c,让其表示序列中元素小于自己的个数:从1开始循环c,  c[i]=c[i]+c[i-1](此时c={1,2,2,2,2,4,5,7})
(3)定义与数组a等长的素组b,b[--c[a[i]-min] = a[i],此时数组b为新排序好的数组。
3.算法的java代码 
public static int[] countSort(int[] a){
int len = a.length;
int[] b = new int[len];
int max = a[0];
int min = a[0];
for(int data:a){
if(data > max){
max = data;
}else if(data < min){   //此处用了个else是因为本人认为一个数不可能比max大的同时还比min小,如果有问题,欢迎指出
min = data;
}
}
int k = max - min +1;
int[] c = new int[k];
for(int i = 0; i < len; i++){
c[a[i]-min]+=1;
}
for(int i = 1; i < k; i++){
c[i] = c[i]+c[i-1];
}
for(int i = 0; i < len; i++){
b[--c[a[i]-min]] = a[i];
}
return b;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值