bucket java_桶排序(BucketSort)(java)

一、原理

桶排序的工作原理是吧区间划分为n个大小相同的子区间,这样的区间称为桶。然后将n个输入的数分步到各个桶中去。每个桶再个别的排序,然后按照次序吧各个桶

中的元素列出来即可。

二、时间复杂度

桶排序是一种鸽巢排序的一种归纳结果。当要被排序阵列内的数值是均匀分配的时候,桶排序使用线性时间(O(n))。但桶排序并不是比较排序,它不受

O(nlongn)下限的影响。

eg:对大小为[1...1000]范围内的n个整数A[1..n]排序。可以把桶设置为大小为10的范围,具体而言设集合B[1]存储[1..10]的整数,集合B[2]存储(10..20]的整数,

i=1,2,,100.总共100个桶然后扫描A[i],吧每个A[i]放入到对应的B[j]中。然后再对每个桶里的数字排序。

假设有n个数字,有m个桶,如果数字是平均分布的,则每个桶里面平均有n/m个数字。如果每个桶里中的数字采用快速排序,那么整个算法的复杂度是

O(n+m*n/m*log(n/m)) = O(n+nlogn-nlogm).当m接近n时,桶排序复杂度接近O(n)。

c931f80e6617e4b629d3028833720875.png

三、代码

import java.util.ArrayList;

import java.util.Collections;

import java.util.Random;

import java.util.List;

public class BucketSort {

int bucketSize = 10

int arraySize = 1000;

public static void main(String[] args) {

// TODO Auto-generated method stub

BucketSort bs = new BucketSort();

int[] array = bs.getArray();

bs.bucketSort(array);

}

public int[] getArray(){

int[] arr = new int[arraySize /3];

Random r = new Random();

for(int i = 0; i < arraySize /3 ; i++)

{

arr[i] = r.nextInt(100000);

}

return arr;

}

public void bucketSort(int[] a)

{

List bucket[] = new ArrayList[bucketSize];

for(int i=0; i < a.length ; i++)

{

int temp = a[i]/10000;

if(bucket[temp] == null)

{

bucket[temp] = new

ArrayList();

}

bucket[temp].add(a[i]);

}

//对桶内各个元素进行排序

for(int j=0;j

{

intsertSort(bucket[j]);

printList(bucket[j]);

}

}

private void printList(List list) {

// TODO Auto-generated method stub

while(list.size()>0)

{

System.out.print(list.remove(0) +"\t");

}

}

private void intsertSort(List list) {

// TODO Auto-generated method stub

Collections.sort(list);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值