您的位置:首页 > 编程语言 > Java开发

基数排序的java实现

2015-09-07 09:48 387 查看
package com.edu.hpu.sort.radix;

import java.util.LinkedList;
import java.util.List;

import com.edu.hpu.sort.Sort;

public class RadixSort extends Sort {
private int radix;
private int d;
public RadixSort(int radix, int d) {
this.radix = radix;
this.d = d;
}
@Override
public int[] doSort(int[] arr) {
List<Integer>[] bucket = init(radix);
int [] tmp = new int [arr.length];
// 控制数字的位
for(int i = 0; i < d; i++){
// 取得位数每个数的某一位
for(int v : arr){
int d = (int) (v / Math.pow(10, i) % 10);
bucket[d].add(v);
}
// 各个位进行桶排序的结果放入tmp中
for(int w = 0, j = 0; j < bucket.length && w < tmp.length; j++){
for(int v : bucket[j]){
tmp[w] = v;
w++;
}
}
// 处理数组
arr = tmp;
for(List<Integer> l : bucket){
l.clear();
}
}
return arr;
}
// 初始化桶
private List<Integer> [] init(int range){
@SuppressWarnings("unchecked")
List<Integer> [] aux = new LinkedList[range];
for(int i = 0; i < aux.length; i++){
aux[i] = new LinkedList<Integer>();
}
return aux;
}
public static void main(String[] args) {
Sort sort = new RadixSort(10, 3);
sort.printOrder(new int []{4, 1, 3, 2, 16, 101, 43,200,999,9, 100, 194, 8, 7});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: