桶排序思想主要是将要排序的数组中的值,使对应编号也就是对应下标的桶中值加1,桶为数组的项。最后遍历桶的数组。打印出排序号的值。
但是必须知道要排序数组的最大值和最小值。有待改进。
public static void main(String[] args) {
int[] reordering = new int[] { 1, 9, 10, 9, 5, 5, 5, 5, 1, 2, 3, 4, 5,
6, 8, 0 };
sort(11, reordering);
}
private static void sort(int limitNum, int[] reordering) {
int[] limit = new int[limitNum];
for (int i = 0; i < limitNum; i++) { 给每个桶置初值为0,//时间复杂度M
limit[i] = 0;
}
for (int j = 0; j < reordering.length; j++) { //时间复杂度N
int t = reordering[j];
limit[t]++; //得到要排序数组的每个值的值,并且将对应桶编号的位置加1
}
for (int i = 0; i < limit.length; i++) { //时间复杂度M
for (int j = 0; j < limit[i]; j++) { //时间复杂度N
System.out.println(i); 打印出排好的顺序,//也就是输出排序结果
}
}
}
输出为0 1 1 2 3 4 5 5 5 5 5 6 8 9 9 10如果想从大到小的输出则只需要变换打印方法
for (int i = limit.length - 1; i >= 0; i--) {
for (int j = 0; j < limit[i]; j++) {
System.out.println(i);
}
}
输出为10 9 9 8 6 5 5 5 5 5 4 3 2 1 1 0;