java基数排序

代码如下:

import java.util.Arrays;

public class MultiKeyRadixSort {
	public static void radixSort(int [] data, int radix, int d)
	{
		System.out.println("开始排序:");
		int length = data.length;
		//需要一个临时数组
		int [] tmp = new int [length];
		//buckets数组是桶式排序必须buckets数组
		int[] buckets = new int[radix];
		//依次从最高位的子关键字对待排序数据进行排序
		//下面循环中rate用于保存当前计算的位(比如十位时rate =10)
        for(int i = 0 ,rate = 1;i < d; i++ )
        {
        	//重置count数组,开始统计第二个关键字
        	Arrays.fill(buckets, 0);
        	//将data数组的元素复制到temporary数组中进行缓存
        	System.arraycopy(data, 0, tmp, 0, length);
        	//计算每个待排序数据的子关键字
        	for(int j = 0;j < length;j++)
        	{
        		//计算数据指定位置上的关键字
        		int subKey = (tmp[j]/rate) % radix;
        		buckets[subKey]++;
        	}
        	for(int j = 1;j < radix ;j++)
        	{
        		buckets[j] = buckets[j] + buckets[j-1];
        	}
        	//按子关键字对指定数据进行排序
        	for(int m = length-1;m >=0;m--)
        	{
        		int subKey = (tmp[m]/rate) % radix;
        		data[--buckets[subKey]] = tmp[m];
        	}
        	System.out.println("对"+rate+"位上子关键字排序:" +
        	      java.util.Arrays.toString(data));
        	rate *= radix;
        }
	}
	public static void main(String[] args) {
		int[] data = {1100,192,221,12,13};
		System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
		radixSort(data,10,4);
		System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
	}
}

  

时间: 2024-08-11 09:52:46

java基数排序的相关文章

java基数排序算法代码下载

原文:java基数排序算法代码下载 代码下载地址:http://www.zuidaima.com/share/1550463272684544.htm 基数排序:基数排序可以说是扩展了的桶式排序, * 比如当待排序列在一个很大的范围内,比如0到999999内,那么用桶式排序是很浪费空间的. * 而基数排序把每个排序码拆成由d个排序码,比如任何一个6位数(不满六位前面补0)拆成6个排序码, * 分别是个位的,十位的,百位的.... * 排序时,分6次完成,每次按第i个排序码来排. * 一般有两种方

排序算法之JAVA基数排序算法

package net.qh.test.sort; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2016/03/07. */ public class Radix { public static int[] asc( int[] array ){ int index = 1; /** 最大数字位数(如100为3位数字,2000为4位数字) */ /** 取得最大数字位数

排序算法系列——基数排序

基数排序不同于其他的七种排序算法,它是基于一种分配法,而非比较.基数排序属于"分配式排序"(distribution sort),基数排序法又称"桶子法"(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶"中,藉以达到排序的作用.它的灵感来自于队列(Queue),它最独特的地方在于利用了数字的有穷性(阿拉伯数字只有0到9的10个). 基本思想: 我们考虑对整数进行基数排序的过程,对于整数,

Java实现基数排序

详细讲解见<2015版数据结构高分笔记>8.6节--基数排序. Java代码如下: package linetimesort; import java.util.LinkedList; import java.util.Objects; /** * 基数排序的思想是多关键字排序 * @author yuncong * */ public class RadixSort { /** * 基于最低位优先方式对一个整型数组排序,数组中整数是d位数: * 以3位整数排序为例,基于最低位优先方式排序的步

算法-java代码实现基数排序

基数排序 第11节 基数排序练习题 对于一个int数组,请编写一个基数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素均小于等于2000. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class RadixSort { 4 // 各位装通法 5 public int[] radixSort(int[] A, in

基数排序简单Java实现

基数排序(radix sort)又称“桶子法”,在对多个正整数进行排序时可以使用.它的灵感来自于队列(Queue),它最独特的地方在于利用了数字的有穷性(阿拉伯数字只有0到9的10个). 基数排序使用11个动态数组实现排序算法,一个主队列(下文都将使用的动态数组称为队列)存储未排序的数据(最后排序完成也仍然可以用它存储,或者如果希望保存原来的数据位置则可能需要增加一个队列):10个子队列用于排序过程中动态存放数值,在排序开始前和结束后可以清空. 我们使用LinkedList类来实现基数排序,其实

数据结构作业之用队列实现的基数排序(Java版)

题目: 利用队列实现对某一个数据序列的排序(采用基数排序),其中对数据序列的数据(第1和第2条进行说明)和队列的存储方式(第3条进行说明)有如下的要求: 1)当数据序列是整数类型的数据的时候,数据序列中每个数据的位数不要求等宽,比 如: 1.21.12.322.44.123.2312.765.56 2)当数据序列是字符串类型的数据的时候,数据序列中每个字符串都是等宽的,比 如: "abc","bde","fad","abd",

基数排序算法的Java实现

1.基数排序算法的简单介绍 关于基数排序算法的介绍有很多资料可以通过很多途径获取.基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程. 基数排序算法: 是一种非比较方法实现的排序算法 基数排序算法是一种稳定的排序算法 基数排序算法的时间复杂度: 分配需要O(n),收集为O(r),其中r为分配后链表的个数,以r=10为例,则有0-9这样10个链表来将原来的序列分类.而

好程序员Java学习路线分享5分钟了解基数排序

好程序员Java学习路线分享5分钟了解基数排序,前言:基数排序无需进行比较和交换,而是利用分配和收集两种基本操作实现排序.基数排序分为两种:第一种是LSD ,从最低位开始排序:第二种是 MSD, 从最高位开始排序. 基数排序思想介绍 分配:对于数字,每位的取值范围是0-9,因此需要10个容器(我们可以将其称为桶),这10个桶标号为0-9.每趟排序时,我们取每一个元素在该位的数值依次放入桶中. 收集:在一趟排序完成后,我们按顺序从0-9的桶中依次取元素. 继续进行分配和收集,直到最大位数排序完成.