1、思想
将数组元素作为数组下标,统计元素出现的个数。然后填充回原数组中。
2、时间复杂度
最好O(n ),最坏O(n ),平均O(n )。
3、代码实现
public class CountSort {
public static void countSort(int[] arr){
if(arr == null || arr.length == 0) return;
int n = arr.length;
int max = arr[0];
//寻找数组的最大值
for(int i=1;i<n;i++){
if(max < arr[i]){
max = arr[i];
}
}
int[] temp = new int[max +1];
for(int i=0;i<=max;i++) temp[i] = 0;
//进行计数
for(int i=0;i<n;i++){
temp[arr[i]]++;
}
int cur = 0;
//进行数组填充
for(int i=0; i<=max; i++){
for(int j= temp[i];j>0; j--){
arr[cur++] = i;
}
}
}
public static void main(String[] args) {
int[] arr = {50,10,90,30,70,40,80,60,20};
countSort(arr);
for (int array : arr) {
System.out.print(array+" ");
}
System.out.println();
}
}
来源:oschina
链接:https://my.oschina.net/u/3991724/blog/3207912