桶排序
桶排序是一种非比较的排序,下面的代码注释里面描述了桶排序的思路
package com.nanjia.chapter1;
import java.util.Arrays;
public class BucketSort {
public static void bucketSort(int[] arr) {
if (arr == null || arr.length < 2)
return;
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i++) {
max = max > arr[i] ? max : arr[i];
}
int[] arr1 = new int[max + 1];
for (int i = 0; i < arr1.length; i++) {
arr1[i] = 0;
}
for (int i = 0; i < arr.length; i++) {
arr1[arr[i]]++;
}
int t = 0;
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] == 0) continue;
for (int j = 0; j < arr1[i]; j++) {
arr[t++] = i;
}
}
}
public static void printArray(int[] arr) {
for (int a: arr) {
System.out.print(a + " ");
}
}
public static int[] generateRandomArray(int maxSize, int maxValue) {
int[] randomArr = new int[(int) (maxSize * Math.random())];
for (int i = 0; i < randomArr.length; i++) {
randomArr[i] = Math.abs((int) ((maxValue + 1) * Math.random()) - ((int)(maxValue * Math.random())));
}
return randomArr;
}
public static int[] copyArray(int[] arr) {
if (arr == null)
return null;
int[] copyArr = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
copyArr[i] = arr[i];
}
return copyArr;
}
public static boolean isEqual(int[] arr1, int[] arr2) {
if (arr1 == null && arr2 == null) {
return true;
}
if (arr1 != null && arr2 == null) {
return false;
}
if (arr1 == null && arr2 != null) {
return false;
}
if (arr1.length != arr2.length) {
return false;
}
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i])
return false;
}
return true;
}
public static void main(String[] args) {
int maxSize = 50;
int maxValue = 100;
int size = 500;
for (int i = 0; i < size; i++) {
int[] arr1 = generateRandomArray(maxSize, maxValue);
int[] arr2 = copyArray(arr1);
Arrays.sort(arr2);
bucketSort(arr1);
System.out.println(isEqual(arr1, arr2));
if (!isEqual(arr1, arr2)) {
System.out.println("error");
}
}
}
}