计数排序网上搜出来的没有图片演示,笨笨的看不懂文字解释,因此没理解计数排序的原理,所以直接看代码理解原理。此次代码的思路是参考 https://www.jianshu.com/p/8f8f19d7b2b9 这篇文章,这次博客算是一次学习记录吧。
?
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class jishupaixu {
public static void main(String[] args){
List<Integer> list = new ArrayList<>(Arrays.asList(23,53,456,234,26,456,7,456,2,5,23,6,457,3,45,21,4321,5,34,645,6,56,23,5,235));
System.out.println(gao(list));
}
public static List<Integer> gao(List<Integer> list){
Integer zuida = list.get(0);
Integer zuixiao = list.get(0);
for (int i = 0; i < list.size(); i++){
if(list.get(i) > zuida){
zuida = list.get(i);
}
if(list.get(i) < zuixiao){
zuixiao = list.get(i);
}
}
List<Integer> gnList = new ArrayList<>();
for(int i = 0; i <= zuida-zuixiao; i++){
gnList.add(0);
}
for(int i = 0; i < list.size(); i++){
int zuobiao = list.get(i)-zuixiao;
gnList.set(zuobiao, gnList.get(zuobiao) + 1);
}
List<Integer> returnList = new ArrayList<>();
for(int i = 0; i < gnList.size(); i++){
if(gnList.get(i) > 0){
for(int j = 0; j < gnList.get(i); j++){
returnList.add(i + zuixiao);
}
}
}
return returnList;
}
}