计数排序(java)
- 本文两个关键词,数组元素的最大值(max),数组的长度(size)。
什么是计数排序?
通俗滴讲,就是用你手中的数组,先找出其中最大值
然后创建一个以其最大值为长度的数组
然后以你手中数组每个元素的值为下标对其出现的次数进行计数
最后使用计数的数组打出新的数组(出现了n次就对结果数组添加n个当前下标,对计数数组进行正向遍历就是升序,倒向遍历就是降序)
当然,如你所见,数组的下标必须为整形,所以对浮点数和负数就此排序就会失效。
java实现代码
import java.util.ArrayList;
public class Sort{
public static ArrayList<Integer> countingsort(ArrayList<Integer> origin){
int max=0;
for(int i=0;i<origin.size();i++){//取得最大值
if(origin.get(i)>max){
max=origin.get(i);
}
}
int[] countarr=new int[max];//生成以最大值为长度的计数数组
for(int i=0;i<origin.size();i++){//遍历原数组进行计数
countarr[origin.get(i)-1]++;
}
ArrayList<Integer> res=new ArrayList<>();
for(int i=0;i<max;i++){//遍历计数数组来获得结果数组
if(countarr[i]>0){
for(int e=0;e<countarr[i];e++){
res.add(i+1);
}
}
}
return res;
}
}