package com.array.test;
import java.util.Arrays;
/**
*
* 桶排序
* 意义:要将一个数组进行排序,首先找出这个数组的最大值,以这个最大值新建另一个长度为这个最大值的数组
* 初始化这个新建的数组的值都为0,然后以要排序的数组值作为新数组的下标,对应一个将这个数组的值加1(有几个就是几)
* 然后输出这个新数组不为0的值就是排序后的值
* BucketSort
* 创建人:蒋川阳
* 时间:2018年9月28日-上午9:35:36
* @version 1.0.0
*
*/
public class BucketSort {
public static int[] bucketSort(int[] arr) {
int len = findMax(arr);
int arr1[] = new int[len+1];
for (int i = 0; i < arr1.length; i++) {
arr1[i]=0;
}
for (int i = 0; i < arr.length; i++) {
arr1[arr[i]] = arr1[arr[i]] + 1;
}
return arr1;
}
public static int findMax(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i]>max) {
max =arr[i];
}
}
return max;
}
public static void main(String[] args) {
int arr[] = {99,55,88,77,95,5,2,7,9,7};
int arrs[] = BucketSort.bucketSort(arr);
for (int i = 0; i < arrs.length; i++) {
if (arrs[i]!=0) {
for (int j = 0; j < arrs[i]; j++) {
System.out.println(i);
}
}
}
}
}
桶排序的复杂度是O(M+N),复杂度是线性的,所以它的排序是非常快的,但是,他却是牺牲了空间换来了时间上的快速.
如果要对1000000个数进行排序,就要创建10000000个桶,所以桶排序虽然快它也有限制,不适合大量的数据排序.