publicstaticvoidbucketSort(int[] arr){int max = Integer.MIN_VALUE;int min = Integer.MAX_VALUE;for(int i =0; i < arr.length; i++){
max = Math.max(max, arr[i]);
min = Math.min(min, arr[i]);}//桶数int bucketNum =(max - min)/ arr.length +1;
ArrayList<ArrayList<Integer>> bucketArr =newArrayList<>(bucketNum);for(int i =0; i < bucketNum; i++){
bucketArr.add(newArrayList<Integer>());}//将每个元素放入桶for(int i =0; i < arr.length; i++){int num =(arr[i]- min)/(arr.length);
bucketArr.get(num).add(arr[i]);}//对每个桶进行排序for(int i =0; i < bucketArr.size(); i++){
Collections.sort(bucketArr.get(i));}
System.out.println(bucketArr.toString());}
计数排序
// 计数排序。假设数组中存储的都是非负整数。
public static void countSort(int[] arr){
int len = arr.length;
if (len <= 1) return;
int max = arr[0];
for (int value : arr) {
if (max < value) max = value;
}
int[] count = new int[max+1];
for (int i = 0; i < max; i++) {
count[i] = 0;
}
for (int value : arr) {
count[value]++;
}
for (int i = 1; i < max+1; i++) {
count[i] = count[i] + count[i - 1];
}
int[] newArr=new int[len];
for (int i = len-1; i >=0 ; i--) {
int index=count[arr[i]]-1;
newArr[index]=arr[i];
count[arr[i]]--;
}
for (int i = 0; i <len ; i++) {
arr[i]=newArr[i];
}
}
基数排序
public static void radixSort(int[] arr) {
int len = arr.length;
int d = maxbit(arr);
System.out.println(d);
int[] count = new int[10];
int[] newArr = new int[len];
int radix = 1, k;
while (d >= 1) {
for (int i = 0; i < 10; i++) {
count[i] = 0;
}
for (int i = 0; i < len; i++) {
k = (arr[i] / radix) % 10;
count[k]++;
}
for (int i = 1; i < 10; i++) {
count[i] = count[i] + count[i - 1];
}
for (int i = len - 1; i >= 0; i--) {
k = (arr[i] / radix) % 10;
newArr[count[k] - 1] = arr[i];
count[k]--;
}
for (int i = 0; i < len; i++) {
arr[i] = newArr[i];
}
System.out.println(Arrays.toString(arr));
d--;
radix *= 10;
}
}
private static int maxbit(int[] arr) {
int max = arr[0];
for (int val : arr) {
if (val > max) max = val;
}
int d = 1;
while (max > 10) {
max /= 10;
d++;
}
return d;
}
堆排序
publicstaticvoidbuildHeap(int[] arr){int n=arr.length-1;for(int i =(n-1)/2; i >=0; i--){heapify(arr,n,i);}}privatestaticvoidheapify(int[] a,int n,int i){while(true){int maxPos = i;if(i *2+1<= n && a[i]< a[i *2+1]) maxPos = i *2+1;if(i *2+2<= n && a[maxPos]< a[i *2+2]) maxPos = i *2+2;if(maxPos == i)break;swap(a, i, maxPos);
i = maxPos;}}publicstaticvoidheapSort(int[] arr){buildHeap(arr);//建堆int k=arr.length-1;while(k>0){swap(arr,0,k);
k--;heapify(arr, k,0);//堆化}}