您的位置:首页 > 其它

桶排序 一个有点小巧的排序算法

2013-09-06 15:12 253 查看
import java.util.Arrays;
import java.util.Random;

/*
* 桶排序 把所有的元素的个数依照大小全部放进bucket数组,然后对bucket数组,运用公式bucket[i]=bucket[i]+bucket[i-1]
* 最后再根据原数组的中的内容,进行一个映射回去,我对这个算法的看法就是,操作下标,让下标记录一个元素应该在的位置,比如-9元素,
* 他在第一位,
* */

public class BucketSort {
public static void bucketSort(Data[] data, int min, int max) {
int[] buckets = new int[max - min];
for (int i = 0; i < data.length; i++)// 对所有元素出现的次数进行计数
{
buckets[data[i].getI()-min]++;// 出现一次加一
}
for (int i = 1; i < buckets.length; i++) {//从1开始
buckets[i] = buckets[i] + buckets[i - 1];

}
Data []temp = new Data[max-min];
System.arraycopy(data,0, temp, 0,data.length);
//进行映射回去,注意下标
for(int i=0;i<data.length;i++)
{
data[--buckets[temp[i].getI()-min]]=temp[i];
}

}

public static void main(String[] args) {

Data[] data = new Data[11];
Random rand = new Random();
data[0] = new Data(39);
data[1] = new Data(-9);
data[2] = new Data(29);
data[3] = new Data(12);
data[4] = new Data(57);
data[5] = new Data(23);
data[6] = new Data(12);
data[7] = new Data(94);
data[8] = new Data(15);
data[9] = new Data(92);
data[10] = new Data(92);
System.out.println("generate data" + Arrays.asList(data));
bucketSort(data, -10, 100);
System.out.println("after sort data" + Arrays.asList(data));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: