桶排序
桶排序(BucketSort)
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶里。每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后依次把各个桶中的记录列出来记得到有序序列。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是比较排序,他不受到O(n log n)下限的影响。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
int a[] = {2, 5, 3, 1, 3, 2, 7, 0, 8, 5, -2, -1};
BucketNumber(a,3);//规定每个桶装的值域,如1桶-2到0,2筒1-3,3桶4-6以此类推
System.out.println(Arrays.toString(a));
}
public static void BucketNumber(int[] a,int OneBucketNumber) {
int N = Integer.MIN_VALUE;
int M = Integer.MAX_VALUE;
for (int i = 0; i < a.length; i++) {
if (a[i] > N) {
N = a[i];//最大值
}
if (a[i] < M) {
M = a[i];//最小值
}
}
ArrayList<Integer> A[]=new ArrayList[(N-M)/OneBucketNumber+1];
for (int i = 0; i < (N-M)/OneBucketNumber+1; i++) {
A[i]=new ArrayList<>();
}
for(int b:a)
{
A[(b-M)/OneBucketNumber].add(b);
}
int j=0;
for(ArrayList B:A)
{
B.sort(Comparator.naturalOrder());
for(Object C:B)
{
System.out.print(C+" ");
a[j]=(Integer) C;
j++;
}
System.out.println();
}
}
}
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
int a[] = {2, 5, 3, 1, 3, 2, 7, 0, 8, 5, -2, -1};
BucketNumber(a,3);//规定每个桶装的值域,如1桶-2到0,2筒1-3,3桶4-6以此类推
System.out.println(Arrays.toString(a));
}
public static void BucketNumber(int[] a,int OneBucketNumber) {
int N = Integer.MIN_VALUE;
int M = Integer.MAX_VALUE;
for (int i = 0; i < a.length; i++) {
if (a[i] > N) {
N = a[i];//最大值
}
if (a[i] < M) {
M = a[i];//最小值
}
}
ArrayList<Integer> A[]=new ArrayList[(N-M)/OneBucketNumber+1];
for (int i = 0; i < (N-M)/OneBucketNumber+1; i++) {
A[i]=new ArrayList<>();
}
for(int b:a)
{
A[(b-M)/OneBucketNumber].add(b);
}
int j=0;
for(ArrayList B:A)
{
B.sort(Comparator.naturalOrder());
for(Object C:B)
{
System.out.print(C+" ");
a[j]=(Integer) C;
j++;
}
System.out.println();
}
}
}
本文来自博客园,作者:赵千万,转载请注明原文链接:https://www.cnblogs.com/zhaoqianwan/p/17872194.html
千万千万赵千万