`

Java之基数排序

阅读更多

该基数排序算法先对低位进行排序,然后对高位排序,而对每一位排序时又采用了计数排序算法。代码如下:

 

package cn.lifx.array.sort;

public class RadixSort 
{
	public static void main(String[] args)
	{
		int[] a = {123, 963, 234, 546, 361, 798, 479, 310, 617, 892};
		
		Display(a, "Before sort:");
		
		a = radixSort(a);
		
		Display(a, "After sort:");
	}
	
	public static int[] radixSort(int[] a)
	{
		int[] b = new int[a.length];
		
		for(int i=0; i<a.length; i++)
			b[i] = a[i];
			
		for(int i=1; i<=a.length; i++)
			b = countSort(b, i);
		
		return b;
	}
	
	public static int[] countSort(int[] a, int k)
	{
		int[] b = new int[a.length];
		int[] c = new int[10];
		
		for(int i=0; i<b.length; i++)
			b[i] = 0;
		
		for(int i=0; i<c.length; i++)
			c[i] = 0;
		
		int s = 1;
		for(int i=0; i<k; i++)
			s = s * 10;
		
		int temp1 = 0;
		for(int i=0; i<a.length; i++)
		{
			temp1 = a[i]%s;
			temp1 = temp1 * 10 / s;
			
			c[temp1] = c[temp1] + 1;
		}
		
		for(int i=1; i<c.length; i++)
			c[i] = c[i] + c[i-1];
		
		int temp2 = 0;
		for(int i=a.length-1; i>=0; i--)
		{
			temp1 = a[i];
			temp2 = a[i]%s;
			temp2 = temp2 * 10 / s;
			
			b[c[temp2]-1] = temp1;
			c[temp2] = c[temp2] - 1;
		}
		
		return b;
	}
	
	public static void Display(int[] a, String str)
	{
		System.out.println(str);
		for(int i=0; i<a.length; i++)
			System.out.print(a[i] + "  ");
		System.out.println();
	}
}

 

结果如下:

 

Before sort:
123  963  234  546  361  798  479  310  617  892  
After sort:
123  234  310  361  479  546  617  798  892  963  

 

 

0
0
分享到:
评论
1 楼 haisheng 2010-01-24  
for(int i=1; i<=a.length; i++)  
            b = countSort(b, i); 


假如a有个元素的位数大于数组长度,就会出问题。

相关推荐

    java基数排序

    本文将详细讲解Java中的基数排序,这是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。基数排序对于大数据量的整数排序具有很高的效率,尤其适用于处理多位数的数组。 ...

    基数排序及优化java

    基数排序及优化java

    Java实现基数排序.rar

    以下是一个简单的Java基数排序代码示例: ```java public class RadixSort { private static final int RADIX = 10; // 基数,这里为10进制 public static void radixSort(int[] nums) { int maxNum = Arrays....

    基数排序算法 java实现

    下面我们将详细探讨基数排序的原理和Java实现。 基数排序的基本思想是通过创建多个桶来分配和收集元素。每个桶对应一个特定的数值范围,这些桶按照数值的位数进行,从最低位到最高位。在排序过程中,我们先按最低位...

    基于双向链表的基数排序

    基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,需要将关键字拆分成数字位。并且按照数字位的值对数据项进行排序,这种方法不需要进行比较操作。 为了尽可能少的...

    [Java算法-排序练习]基数排序.java

    该资源提供了在Java中如何实现基数排序的全面指南。文档涵盖了基数排序的基本概念,包括如何对数组进行排序以及如何在Java中实现基数排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现基数排序,包括详细...

    基数排序 java实现

    自己写的插入排序,随机产生1000次,每次产生0-1000个数,验证算法正确性。java实现。

    Java实现基数排序算法(源代码)

    ### Java实现基数排序算法 #### 实现原理 基数排序是一种非常高效的非比较型整数排序算法,它通过按数字的各个位数进行排序来实现序列的整体有序化。该算法的关键在于能够有效地处理多位数,避免了传统的两两比较...

    Java 基数排序 排序 算法 数据结构 数组 输出

    Java 基数排序 排序 算法 数据结构 数组 输出

    详解Java常用排序算法-基数排序

    Java 基数排序算法详解 基数排序(Radix Sort)是一种非比较排序算法,它的基本思想是将待排序的数组按照位数(个位、十位、百位)进行划分,然后依次对每个位上的数字进行排序,最终得到有序的数组。基数排序的...

    java实现基数排序算法

    基数排序的关键思想是按照数字的个位、十位、百位等逐个进行计数排序,从最低位到最高位。在每个位上,使用计数排序来稳定地排序数组。通过多次迭代,对所有位进行排序后,最终得到有序的数组。 在示例代码中,我们...

    java算法——基数排序/桶排序

    基数排序/桶排序 *统计将数组中的数字分配到桶中后,各个桶中的数字个数 *数组中每个数的每一位数根据大小分配到对应大小为0~9的桶 *将各个桶中的数字个数,转化成各个桶中最后一个数字的下标索引

    Java排序算法(桶排序,基数排序等)

    基数排序是根据数字位数进行排序的算法,从最低有效位开始,逐位进行排序。基数排序的时间复杂度为O(d*(n+k)),其中d是数字的最大位数,k是基数。Java实现如下(未给出,需自行实现)。 以上就是Java中实现的一些...

    Radix Sort (基数排序)排序算法

    下面是一个基于Java语言的基数排序算法实现示例: ```java import java.util.*; class NumNode { byte[] data; NumNode next; NumNode(int ch, NumNode new_node) { int i = 0; data = new byte[10]; // ...

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

    "Java语言实现基数排序代码分享" 基数排序是非比较排序算法,通过对数字的每个位数进行排序从而实现对整个数字的排序。Java语言实现基数排序代码分享是通过使用基数排序算法来对整数数组进行排序。 1. 基数排序...

    基数排序java代码

    基数排序java代码,望对大家有帮助,谢谢!

    插入排序冒泡排序堆排序基数排序选择排序快速排序源码

    例如,插入排序和选择排序适合小规模数据,冒泡排序虽然效率较低但实现简单,堆排序和快速排序在处理大规模数据时有较好性能,而基数排序则能处理非负整数排序。在实际开发中,根据具体需求选择合适的排序算法是非常...

    山东大学-基数排序课程设计

    java版本的基数排序,支持过程演示,支持数据编辑,插入,删除,生成随机数等功能

    基数排序介绍和java代码实现

    下面是一个简单的Java实现,展示了如何使用基数排序对整数数组进行排序: ```java public class RadixSort { public static void radixSort(int[] arr) { int max = getMax(arr); int exp = 1; while (max / ...

    java各种数组排序插入交换选择归类基数排序.pdf

    本文将深入探讨几种常见的数组排序算法,包括插入排序、交换排序、选择排序和归并排序,以及基数排序。这些算法在不同的场景下有不同的效率表现,选择合适的排序方法对程序性能有着显著影响。 1. 插入排序: 插入...

Global site tag (gtag.js) - Google Analytics