基数排序 原始java实现 时间复杂度O(n)

修改自 http://www.java3z.com/article/article5/53429.html?id  原始的方式 能看懂 能写出来 能理解   原代码有bug

http://www.cnblogs.com/jingmoxukong/p/4311237.html#_labelTop#undefined 优化基数排序  代码看不懂 



private static void radixSort(int[] array, int d) {
int radix=10;//代表0-9
int n = 1;// 代表位数对应的数:1,10,100...
int k = 0;// 保存每一位排序后的结果用于下一位的排序输入
int length = array.length;
// 排序桶用于保存每次排序后的结果,这一位上排序结果相同的数字放在同一个桶里
int[][] bucket = new int[radix][length];

int[] order = new int[radix];// 用于保存每个桶里有多少个数字

while (n < d) {
for (int num : array) // 将数组array里的每个数字放在相应的桶里
{
int digit = (num / n) % 10;
bucket[digit][order[digit]] = num;
order[digit]++;//桶中存储的个数加1
}


// 将前一个循环生成的桶里的数据覆盖到原数组中用于保存这一位的排序结果
for (int i = 0; i < radix; i++) {
if (order[i] != 0)// 这个桶里有数据,从上到下遍历这个桶并将数据保存到原数组中
{
for (int j = 0; j < order[i]; j++) {
array[k] = bucket[i][j];
k++;
}
}
order[i] = 0;// 将桶里计数器置0,用于下一次位排序
}
n *= 10;
k = 0;// 将k置0,用于下一轮保存位排序结果
}
}


public static void main(String[] args) {
int[] A = new int[] {  93, 43, 55, 14, 0,28, 65, 39, 81 };
radixSort(A, 100);
for (int num : A) {
System.out.print(num+"\t");
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值