privatestaticint[] countingSort(int[] arr) { // 遍历数组,得到最值 int max = arr[0]; int min = arr[0]; for (int j : arr) { if (max < j) { max = j; } if (min > j) { min = j; } }
// 根据最值新建一个用于计数的数组, 比如原数组最大值为 4,最小值为 2,新建的计数数组为 [2,3,4],所以声明长度的时候为 max - min + 1 int[] bucket = newint[max - min + 1]; // 再次遍历数组,将对应的 bucket 下标做 ++ 操作 for (int i : arr) { bucket[i - min]++; } System.out.printf("%-10s: %s%n", "Bucket", Arrays.toString(bucket));
// 新建一个数组存储下标结束的值,用于保证排序稳定性 int[] endIndex = newint[bucket.length]; int sum = 0; for (int i = 0; i < endIndex.length; i++) { sum += bucket[i]; endIndex[i] = sum; } System.out.printf("%-10s: %s%n", "endIndex", Arrays.toString(endIndex));
privatestaticint[] countingSort(int[] arr) { // 遍历数组,得到最值 int max = arr[0]; int min = arr[0]; for (int j : arr) { if (max < j) { max = j; } if (min > j) { min = j; } }
// 根据最值新建一个用于计数的数组, 比如原数组最大值为 4,最小值为 2,新建的计数数组为 [2,3,4],所以声明长度的时候为 max - min + 1 int[] bucket = newint[max - min + 1]; // 再次遍历数组,将对应的 bucket 下标做 ++ 操作 for (int i : arr) { bucket[i - min]++; } System.out.printf("%-10s: %s%n", "Bucket", Arrays.toString(bucket));
// 新建一个数组存储下标结束的值,用于保证排序稳定性 for (int i = 1; i < bucket.length; i++) { bucket[i] = bucket[i] + bucket[i - 1]; } System.out.printf("%-10s: %s%n", "Index", Arrays.toString(bucket));