时间复杂度
平均、最优、最差:O(n+k)
空间复杂度
O(k)
java代码
import java.util.Arrays;
public class Sort {
public static int[] countSort(int[] arr){
int min = arr[0];
int max = arr[0];
for (int i=0;i<arr.length;i++){
if (min>arr[i]){
min = arr[i];
}else if (max<arr[i]){
max = arr[i];
}
}
int range = max - min + 1;
int[] count = new int[range];
for (int value: arr){
count[value-min]++;
}
for (int i=1;i<range;i++){
count[i] += count[i-1];
}
int[] res = new int[arr.length];
for (int i=0;i<arr.length;i++){
int index = arr[i] - min;
count[index]--;
res[count[index]] = arr[i];
}
return res;
}
public static void main(String[] args) {
int[] list = {321, 1234, 543, 324, 24, 960, 540, 672, 783, 1000};
list = countSort(list);
System.out.println(Arrays.toString(list));
}
}