基数排序 原始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");
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

排序算法之 基数排序 及其时间复杂度和空间复杂度

基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015年03月24日 16:51
  • 4970

时间复杂度O(n)什么意思

时间复杂度  算法分析  同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。...
  • Sunc23
  • Sunc23
  • 2015年03月27日 10:04
  • 856

时间复杂度:O(1)、O(n)、O(n²)、O(nlogn)等是什么意思,白话文解释专业术语。

(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并...
  • qq_27093465
  • qq_27093465
  • 2017年04月25日 11:28
  • 1314

《算法导论》笔记 第8章 8.3基数排序

【笔记】 基数排序
  • cyendra
  • cyendra
  • 2014年04月11日 21:41
  • 774

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

什么是基数排序? (一)基数排序的思想:把待排序的整数按位分,分为个位,十位.....从小到大依次将位数进行排序。实际上分为两个                                   ...
  • Yabber0914
  • Yabber0914
  • 2016年08月22日 19:25
  • 1365

算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?

提出问题(在做功能时遇到的):为什么,O(1)、O(n)的概念又是什么 Java中  Set 和 List 集合  的contains()方法,检查数组链表中是否包含某元素 检查数组链表中是否包含...
  • qq_28867949
  • qq_28867949
  • 2017年08月17日 22:03
  • 558

如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)

题目描述: 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1) 解析: 利用计数排序法,设置一大小为65536的int数组,范围a[0]~a[65535],并初始为0,...
  • rj042
  • rj042
  • 2014年03月13日 00:18
  • 2347

一个时间复杂度为O(n),空间复杂度为O(1)的排序算法

 一个时间复杂度为O(n),空间复杂度为O(1)的排序算法来源:http://blog.csdn.net/rerli/archive/2003/12/18/19041.aspx#508832     ...
  • l_r_h
  • l_r_h
  • 2007年05月18日 00:19
  • 2661

快速排序算法的时间复杂度为什么是O(NlogN),还有O(N^2)

转载自:http://www.cnblogs.com/pugang/archive/2012/07/02/2573075.html 经常听人谈起各种排序算法的时间复杂度,这个是O(n2)的,...
  • iihtd
  • iihtd
  • 2016年04月15日 15:37
  • 2050

冒泡排序[简单复杂度高O(N^2)]

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。 “冒泡排序”的原理是:每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数(即第5位)归位,第二趟只能将倒数...
  • wtyvhreal
  • wtyvhreal
  • 2015年01月27日 15:49
  • 1876
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基数排序 原始java实现 时间复杂度O(n)
举报原因:
原因补充:

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