桶排序的实现:
package L3;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
//桶排序
public class L10 {
static int Mathmax(int[] arr) {
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max < arr[i])
max = arr[i];
}
return max;
}
static int hash(int val, int max, int length) {
return val * (length) / (max + 1);
}
static void insert(LinkedList<Integer> bucket, int val) {
if (bucket.isEmpty()) {
bucket.add(val);
} else {
bucket.add(val);
bucket.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
if (o1 < o2)
return -1;
else if (o1 > o2)
return 1;
else
return 0;
}
});
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 1, 5, 6, 8, 25, 96, 2, 5, 5, 3, 32 };
int length = arr.length;
LinkedList<Integer>[] bucket = new LinkedList[length];
for (int i = 0; i < length; i++) {
bucket[i] = new LinkedList<>();
}
int max = Mathmax(arr);
for (int i = 0; i < length; i++) {
int val = arr[i];
int index = hash(val, max, length);
insert(bucket[index], val);
}
int k = 0;
for (LinkedList<Integer> List : bucket) {
while (!List.isEmpty()) {
arr[k++] = List.poll();
}
}
System.out.println(Arrays.toString(arr));
}
}