计数排序
步骤:
1.花 O(n)的时间扫描一下整个序列 A,获取最小值 min 和最大值 max
2.开辟一块新的空间创建新的数组 B,长度为 ( max - min + 1)
3.数组 B 中 offset 的元素记录的值是 A 中某元素出现的次数
4.最后输出目标整数序列,具体的逻辑是遍历数组 B,输出相应元素以及对应的个数
优点:对比插入、选择、冒泡排序(比较类排序)来说更快,时间复杂度低。
代码:
import java.util.*;
class jishupaixu{
public static void main(String[] args){
int[] a={9,8,15,2,4,7,19,2,15,19,15};
//找最小值和最大值
int min=a[0];
int max=a[0];
for(int i=1;i<a.length;i++){
if(a[i]<min){
min=a[i];
}
if(a[i]>max){
max=a[i];
}
}
//创建数组
int[] b=new int[max-min+1];
int offset=0-min;//数字+offset=角标
for(int i=0;i<a.length;i++){
b[a[i]+offset]++;
}
for(int i=0;i<b.length;i++){
while(b[i]!=0){
System.out.print(i-offset+" ");
b[i]--;
}
}
}
}