最近有学习基数排序(桶排序),先写下简单的一次性桶排序。
方法:
//排序数组a[],假象桶bucket[],临时存放数组tmp[] ,需要方法tmp=a.clone()
1.复制数组 tmp=a.clone();
2.设置桶的长度bucket.length= a.max-a.min+1 ;
3.将数字放入桶中并记录数字放入次数 ;
4.调整桶最终的记录次数;
4.根据桶的记录将临时数组里的数据按顺序放回原数组中
public class bucketSort {
int a[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
public static void main(String[] args) {
int a[] = { 1, 2, 3, 4, 8, 9, 4, 6, 5, 7, 8, 5 };
System.out.println("排序前:");
for (int b : a) {
System.out.print(b + " ");
}
int min = 1, max = 9;
int tmp[] = new int[a.length];
tmp = a.clone();// 复制数组临时存放
int[] bucket = new int[max - min + 1];// 创建桶
/* 排序过程 */
// 将数字放入桶中
for (int i = 0; i < a.length; i++) {
// 记录数字出现次数
bucket[a[i] - min]++;// a[i]-min规定第一个桶放入什么数字,后面的桶数字依次增加
}
/*
* 调整每个桶记录的次数
* 因为每个桶能放的数据是依次增大的
* 所以每个桶最后记录的次数=自己原来记录的次数+前面的所有桶记录的次数
* 依次叠加即可
*/
for (int k = 1; k < bucket.length; k++) {
bucket[k] = bucket[k] + bucket[k - 1];// 后一个桶记录的次数
}
// 按照桶记录的数据将临时数组的数据按顺序放回原来的数组中
for (int h = 0; h < a.length; h++) {
//对照入桶的顺序 bucket[a[i] - min]++,tmp[]=a[]即可得到出桶顺序
a[--bucket[tmp[h] - min]] = tmp[h];
}
/* 排序过程end */
System.out.println("排序后:");
for (int b : a) {
System.out.print(b + " ");
}
}
}// END