基数排序 原始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");
}
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q178266871/article/details/51545295
上一篇Cannot resolve symbol
下一篇多重背包的java实现 二进制优化
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭