import java.util.Arrays;
public class 计数排序_优化 {
/**
* @param args
*/
public static int[] counSort(int[] array) {
// 得到数列的最大值和最小值,并算出差d
int max = array[0];
int min = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
if (array[i] < min) {
min = array[i];
}
}
int d = max - min;
// 创建统计数组并统计对应元素的个数
int[] countArray = new int[d + 1];
for (int i = 0; i < array.length; i++) {
countArray[array[i] - min]++;
}
// 统计数组做变形,后面的元素等于前面的元素之和
for (int i = 1; i < countArray.length; i++) {
countArray[i] += countArray[i - 1];
}
// 倒序遍历原始数列,从统计数组找到正确位置,输出到结果数组
int[] sortedArray = new int[array.length];
for (int i = array.length - 1; i >= 0; i--) {
sortedArray[countArray[array[i] - min] - 1] = array[i];
countArray[array[i] - min]--;
}
return sortedArray;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = { 95, 94, 91, 98, 99, 90, 99, 93, 92, 93 };
int[] sortedArray = counSort(array);
System.out.println(Arrays.toString(sortedArray));
}
}
计数排序_优化
最新推荐文章于 2023-04-24 23:12:24 发布