基数排序 原始java实现 时间复杂度O(n)
来源:互联网 发布:php访问量 ip 编辑:程序博客网 时间:2024/06/10 11:57
修改自 http://www.java3z.com/article/article5/53429.html?id 原始的方式 能看懂 能写出来 能理解 原代码有bug
http://www.cnblogs.com/jingmoxukong/p/4311237.html#_labelTop#undefined 优化基数排序 代码看不懂
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");
}
}
0 0
- 基数排序 原始java实现 时间复杂度O(n)
- 八大排序算法JAVA实现(时间复杂度O(n-n)篇)
- 时间复杂度O(n)是什么意思
- 时间复杂度O(f(n))
- 在柱状图中找最大矩形——O(n)时间复杂度java实现
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- 【算法数据结构Java实现】时间复杂度为O(n)的最大和序列
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- [LeetCode][11]Container With Most Water解析 时间复杂度为O(n) -Java实现
- 八大排序算法JAVA实现(时间复杂度O(n-logn)篇)
- 实现排序算法,时间复杂度为O(n)
- 实现左移指定位数,时间复杂度O(n) ,空间复杂度O(1)
- 时间复杂度最快的排序算法 O(n) JAVA代码
- 从顺序表中删除所有值为x的元素(Java实现),要求时间复杂度O(n),空间复杂度O(1)
- 时间复杂度O(n),空间复杂度O(1)的排序
- 时间复杂度为O(n),空间复杂度为O(1)
- O(N)时间复杂度、O(1)空间复杂度 构造数组
- 生成指定范围内无重复的随机乱序数组(JAVA实现/时间复杂度为O(n))
- 安装libxml2时libtoolT错误解决办法
- Java命名规范和编程风格
- 01背包动态规划-java源码
- Leetcode 104. Maximum Depth of Binary Tree
- 飛飛(五十一)重载函数的应用
- 基数排序 原始java实现 时间复杂度O(n)
- 几种循环的区别
- 第14周-项目2-两个成员的类模板(2)
- 网络编程中对进程的理解(Linux + GCC)
- Android动画效果translate、scale、alpha、rotate
- FFmpeg之音视频相关概念
- Scala简明教程(2)
- 康托展开
- 第十三周项目二:分数类中的运算符重载(3)