排序算法之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位数字) */
        /** 取得最大数字位数 */
        for( int i = 0 ; i < array.length ; i++ ){
            int length = Integer.toString(array[i]).length();
            if( index < length ){
                index = length;
            }
        }
        return sort( array , 0 , index);

    }

    /**
     * @param array 数组
     * @param exponent 起始位数(代码中实际意义为:10的exponent次方。起始位数即为10的0次方,所以为个位)
     * @param index 最大数字位数(如100为3位数字,2000为4位数字)
     */
    private static int[] sort( int[] array , int exponent , int index){

        int length = array.length;
        /** 此处我选择用List,而不是int[n][n]的数组 */
        List<List<Integer>> list = new ArrayList<List<Integer>>();
        for( int i = 0 ; i < 10  ; i++ ){
            list.add(new ArrayList<Integer>());
        }

        /** 按照各个位数排序统计 */
        for( int i = 0 ; i < length ; i++ ){
            int num = 0;
            String str = Integer.toString(array[i]);
            if( str.length() - exponent - 1 >= 0 ){
                num = Integer.parseInt(str.substring(str.length() - exponent - 1, str.length() - exponent));
            }
            list.get(num).add(array[i]);
        }

        /** 串起桶中数据 */
        for( int k = 0 , i = 0 ; i < list.size() ; i++ ){
            for( int j = 0 ; j < list.get(i).size() ; j++ ){
                array[ k++ ] = list.get(i).get(j);
            }
        }

        /** 若还有更高位数,则按照下一位数进行排序 */
        if( index == ++exponent ){
            return array;
        }else{
            return sort( array , exponent , index );
        }

    }

}

  

时间: 2024-10-30 16:46:41

排序算法之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.Calendar; import java.util.List; /** * Created by Administrator on 2016/03/01. */ public class Insert { public int[] sort(int[] arr){ if ( arr == null || arr.length <= 1 ){ return

基数排序算法的Java实现

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

排序算法七:基数排序(Radix sort)

上一篇提到了计数排序,它在输入序列元素的取值范围较小时,表现不俗.但是,现实生活中不总是满足这个条件,比如最大整形数据可以达到231-1,这样就存在2个问题: 1)因为m的值很大,不再满足m=O(n),计数排序的时间复杂也就不再是线性的: 2)当m很大时,为计数数组申请的内存空间会很大: 为解决这两个问题,本篇讨论基数排序(Radix sort),基数排列的思想是: 1)将先按照某个基数将输入序列的每个元素划分成若干部分,每个部分对排序结果的影响是有优先级的: 2)先按低优先级排序,再按高优先级

[转]各种排序算法及其java程序实现

原文:http://blog.csdn.net/t12x3456/article/details/7430700 各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想: 两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止.2. 排序过程: 设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的

算法基础——经典八大排序算法的Java及Python实现

概述 八大排序算法不用多说了,程序员算法基础必须要掌握的,现在总结一下加深记忆.下图是这八大排序算法的分类.名称.时间空间复杂度,以及稳定性. 代码 以下是经典八大排序算法的Java及Python代码,都是基于经典算法书籍<算法导论>里的伪代码实现的,我在关键语句部分附上了注释. 按照上图中的顺序分别介绍八大排序算法的实现(升序),前面是Java,后面是Python.Java的排序函数写在了一个类里,Python的排序函数则直接写出来了. 直接插入排序 public class InsertS

程序员必须掌握的8大排序算法(Java版)

程序员必须掌握的8大排序算法(Java版) 提交 我的评论 加载中 已评论 程序员必须掌握的8大排序算法(Java版) 2015-07-28 极客学院 极客学院 极客学院 微信号 jikexueyuan00 功能介绍 极客学院官方帐号,最新课程.活动发布.欢迎大家反馈问题哟^_^ 本文由网络资料整理而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空

常用排序算法及Java实现

排序算法,可以分为内部排序和外部排序两大种.这篇文章主要对内部排序进行介绍.内部排序又分为两类,基于比较的非线性时间类,和非比较的线性时间类.前一类又可以分为四种,交换排序(包括冒泡排序和快速排序),插入排序(包括简单插入排序和希尔排序),选择排序(包括简单选择排序和堆排序)以及归并排序:后者主要包含三种,计数排序,桶排序和基数排序. 总体来说,快排.堆排和归并排序是非线性时间中最快的三种.一般认为,快排的时间效率会比堆排更好.另一方面,快排和堆排都是不稳定的算法,只有归并排序.冒泡排序和插入排

oj教程--排序算法(Java)

import java.util.ArrayList; import java.util.List; /** * 排序算法主类 * * @author eric */ class SortArray { /* * [插入排序] * 基本思想: 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的, * 现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的, 如此反复循环,直到全部排好顺序. */ public void insertSort(int[] arr)