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

原创 2016年05月31日 14:12:40

修改自 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");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

8大排序之(五)------简单理解 基数排序 与时间复杂度

什么是基数排序? (一)基数排序的思想:把待排序的整数按位分,分为个位,十位.....从小到大依次将位数进行排序。实际上分为两个                         ...

在柱状图中找最大矩形——O(n)时间复杂度java实现

最近在准备找工作,知道了这道题,用java实现了O(n)时间复杂度的算法。     具体题目如下:给一组非负的整数来表示一个柱状图,设计一个算法获得柱状图中最大矩形的面积。比如,输入如下数据:2,1,...
  • xybsos
  • xybsos
  • 2012-10-08 16:47
  • 6524

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

生成指定范围内无重复的随机乱序数组(JAVA实现/时间复杂度为O(n))

本文给出一个最差时间复杂度为O(n)的生成指定范围内无重复随机乱序数组的算法,以及十分健壮完备的JAVA实现。

[LeetCode][11]Container With Most Water解析 时间复杂度为O(n) -Java实现

Q: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate...

一、排序(时间复杂度 O(n^2))

时间复杂度 O(n^2)的经典算法的C++实现,包括冒泡排序、选择排序以及插入排序

int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N)

int a[] = {12,13,12,13,19,18,15,12,15,16,17},要求对数组a进行排序,要求时间复杂度为O(N) 根据时间复杂度要求,可以用鸽巢排序。所谓鸽巢排序, 也被称...

一个数组中只有0,1,2三个元素,进行排序,要求时间复杂度为O(n)

思路: 设置三个标记指针,pos0,pos2,cur 令pos0从前往后遍历,指向第一个非0的位置,pos2从后往前遍历,指向第一个非2的位置 然后cur从pos0开始往后遍历: 遇到0就和p...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)