Java语言实现基数排序代码分享

 更新时间:2017年12月18日 10:59:52   作者:zengzhihua  
这篇文章主要介绍了Java语言实现基数排序代码分享,具有一定借鉴价值,需要的朋友可以参考下。

算法思想:依次按个位、十位...来排序,每一个pos都有分配过程和收集过程,array[i][0]记录第i行数据的个数。

package sorting;
/**
 * 基数排序
 * 平均O(d(n+r)),最好O(d(n+r)),最坏O(d(n+r));空间复杂度O(n+r);稳定;较复杂
 * d为位数,r为分配后链表的个数
 * @author zeng
 *
 */
public class RadixSort {
	//pos=1表示个位,pos=2表示十位
	public static int getNumInPos(int num, int pos) {
		int tmp = 1;
		for (int i = 0; i < pos - 1; i++) {
			tmp *= 10;
		}
		return (num / tmp) % 10;
	}
	//求得最大位数d
	public static int getMaxWeishu(int[] a) {
		int max = a[0];
		for (int i = 0; i < a.length; i++) {
			if (a[i] > max)
			        max = a[i];
		}
		int tmp = 1, d = 1;
		while (true) {
			tmp *= 10;
			if (max / tmp != 0) {
				d++;
			} else
			        break;
		}
		return d;
	}
	public static void radixSort(int[] a, int d) {
		int[][] array = new int[10][a.length + 1];
		for (int i = 0; i < 10; i++) {
			array[i][0] = 0;
			// array[i][0]记录第i行数据的个数
		}
		for (int pos = 1; pos <= d; pos++) {
			for (int i = 0; i < a.length; i++) {
				// 分配过程
				int row = getNumInPos(a[i], pos);
				int col = ++array[row][0];
				array[row][col] = a[i];
			}
			for (int row = 0, i = 0; row < 10; row++) {
				// 收集过程
				for (int col = 1; col <= array[row][0]; col++) {
					a[i++] = array[row][col];
				}
				array[row][0] = 0;
				// 复位,下一个pos时还需使用
			}
		}
	}
	public static void main(String[] args) {
		int[] a = { 49, 38, 65, 197, 76, 213, 27, 50 };
		radixSort(a, getMaxWeishu(a));
		for (int i : a)
		      System.out.print(i + " ");
	}
}

关注一下运行结果:

总结

以上就是本文关于Java语言实现基数排序代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他Java相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Spring实战之类级别缓存实现与使用方法

    Spring实战之类级别缓存实现与使用方法

    这篇文章主要介绍了Spring实战之类级别缓存实现与使用方法,结合实例形式分析了Spring类级别缓存配置、属性、领域模型等相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • Java中Controller引起的Ambiguous mapping问题及解决

    Java中Controller引起的Ambiguous mapping问题及解决

    这篇文章主要介绍了Java中Controller引起的Ambiguous mapping问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java List集合取交集的8种不同实现方式总结

    Java List集合取交集的8种不同实现方式总结

    工作中经常遇到需要取两个集合之间的交集、差集情况,下面这篇文章主要给大家总结介绍了关于Java List集合取交集的8种不同实现方式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • Java上转型和下转型对象

    Java上转型和下转型对象

    这篇文章给大家讲述了Java上转型和下转型对象的详细用法以及相关的代码分享,有兴趣的朋友可以学习下。
    2018-03-03
  • 详解tryAcquire()、addWaiter()、acquireQueued()

    详解tryAcquire()、addWaiter()、acquireQueued()

    这篇文章主要tryAcquire()、addWaiter()、acquireQueued()的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 关于mybatis-plus逻辑删除无效的问题

    关于mybatis-plus逻辑删除无效的问题

    这篇文章主要介绍了mybatis-plus逻辑删除无效,文中给大家提到了配置过程及全部代码,代码简单易懂,需要的朋友可以参考下
    2021-09-09
  • SpringBoot错误处理机制以及自定义异常处理详解

    SpringBoot错误处理机制以及自定义异常处理详解

    这篇文章主要为大家详细介绍了SpringBoot错误处理机制以及自定义异常处理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • SpringBoot快速整合RabbitMq小案例(使用步骤)

    SpringBoot快速整合RabbitMq小案例(使用步骤)

    这篇文章主要介绍了SpringBoot快速整合RabbitMq小案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 深入浅出分析Java 类和对象

    深入浅出分析Java 类和对象

    面向对象乃是Java语言的核心,是程序设计的思想。Java语言的面向对象技术包括了面向对象和面向过程的基本概念,面向对象的特征,Java语言的类,对象,修饰符,抽象类等一系列的知识点
    2022-03-03
  • java中spi使用详解

    java中spi使用详解

    java中spi(service provider interface)是jdk内置的一种服务发现机制,可以基于配置,在运行时加载指定服务。这篇文章主要介绍了java中spi使用,需要的朋友可以参考下
    2020-09-09

最新评论