`
hongjn
  • 浏览: 56072 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

基数排序Radix Sort

阅读更多

package org.hongjn.algorithm.sort;

import java.util.Arrays;

/**
 * 基数排序Java实现
 * @date 2011-10-19
 */
public class RadixSort {
    /**
     * 
     * @param data 待排序数组
     * @param digitNum 数组中元素的位次
     */
    public static int[] sort(int[] data) {
        // 取得数组中最大的元素
        int maxElement = 0;
        for (int element : data) {
            if (element > maxElement) {
                maxElement = element;
            }
        }

        String maxElementStr = String.valueOf(maxElement);
        // 计算数组中最大元素的位数
        int digitNum = maxElementStr.length();

        // 从最低位开始,按照其基数radix进行排序
        for (int i = 1; i <= digitNum; i++) {
            // 根据基数的范围构建临时数组
            int[] tmp = new int[10]; // 十进制数,基数0-9共十个

            for (int element : data) {
                int radix = getRadix(element, i); // 取得元素第i位上的基数
                ++tmp[radix]; // 对于基数radix相同的,在数组tmp中累积相加
            }

            // 此处,计算数组tmp中小于等于基数j的个数
            for (int j = 1; j < tmp.length; j++) {
                tmp[j] = tmp[j] + tmp[j - 1];
            }

            int[] result = new int[data.length]; // 存储每次排序的结果
            // 遍历数组,排序
            for (int k = data.length - 1; k >= 0; k--) {
                // 对于遍历到的每个元素,取得第k位的基数radix
                int radix = getRadix(data[k], i);
                // 根据基数在tmp数组中的位置,确定该元素在数组result中的位置
                result[--tmp[radix]] = data[k];
            }

            // 将result的数据拷贝回data,继续循环
            data = Arrays.copyOf(result, result.length);
        }

        return data;
    }

    // 求得数组num的第d位的基数
    private static int getRadix(int num, int d) {
        return (int) (num / Math.pow(10, d - 1)) % 10;
    }

}



1
1
分享到:
评论

相关推荐

    基数排序radix sort

    排序算法中的基数排序,更重要的是会算时间复杂度,基数排序可以说是以计数排序位基础的,只不过变成了一位一位来或者一个字节一个字节来,每位或者每个字节都过了一遍,则排序完毕。很简单的程序,在code::block IDE...

    Java基数排序radix sort原理及用法解析

    Java基数排序Radix Sort原理及用法解析 Java基数排序Radix Sort是一种高效的稳定性排序算法, thuộc於“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort。顾名思义,它是通过键值的...

    c#基数排序Radix sort的实现方法

    经典排序算法 – 基数排序Radix sort 原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个...

    基数排序-radix sort

    基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种排序方法对于大数据量的处理非常有效,尤其适合于数据范围远大于内存大小的情况。以下是基数排序的详细...

    基数排序(Radix Sort)是一种非比较型的整数排序算法,其基本思想是按照从最低位到最高位的顺序对数字进行排序 基数排序可以

    基数排序:基数排序(Radix Sort)是一种非比较型的整数排序算法,其基本思想是按照从最低位到最高位的顺序对数字进行排序。基数排序可以用于对整数或字符串进行排序,因为它实际上是对每个数字位进行排序,而不是...

    基数排序——radix-sort

    void radix_sort(int A[],int B[],int length,int d) { int i; for (i=1;i;i++) { get_k(A,B,i,length,d); insert_sort(B,A,length); printf("\n\n第%d位排序完成的结果:\n\n",i); print_A(A,length); ...

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

    ### Radix Sort (基数排序) 排序算法详解 #### 一、算法介绍与应用场景 基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达...

    基数排序原理和程序Radix Sort Tutorial

    基数排序(Radix Sort)是一种非比较型整数排序算法,其效率高于基于比较的传统排序算法。本文将深入探讨基数排序的基本原理及其程序实现。 #### 基数排序概述 基数排序通过按位对整数进行排序来工作。它首先按照...

    经典算法的C#源码实现

    经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonhole sort 经典排序算法 - 归并排序Merge sort 经典排序算法 - 冒泡排序Bubble sort 经典排序算法 - 选择排序Selection sort 经典排序算法 - ...

    matlab 实现基数排序(Radix Sort)

    基数排序是一种非比较排序算法,其基本思想是将整数按位数切割成不同的数字,然后按每个位数分别进行排序。

    基数排序的原理及应用.pdf

    基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别进行排序。以下是对基数排序原理及应用的详细解释: 基数排序的原理 1. 数位排序:基数排序从最低位...

    基数排序过程及程序基数排序过程及程序

    基数排序(Radix Sort)是一种非比较型的整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表示字符串、卡片等数据(当成是整数即可),所以基数排序并不限于整数。它是...

    基于双向链表的基数排序

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

    radix sort

    **基数排序(Radix Sort)**是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序非常有效,尤其是在数据范围较大的情况下,其时间复杂度可以...

    基数排序、堆排序、希尔排序、直接插入排序

    在`基数排序Radix_sort.cpp`中,我们可以看到如何利用这个原理实现排序过程。 其次,堆排序是一种基于比较的排序算法,它通过构建一个大顶堆或小顶堆来完成排序。堆是一种特殊的树形数据结构,其每个父节点的值都...

    基数排序_RADIXSORT

    1. 计数排序(Counting Sort)基数排序: 计数排序本身是一种非比较型排序,适用于排序非负整数。在基数排序中,我们从最低有效位(个位)开始,到最高有效位(高位)结束。对于每一位,我们创建一个大小为10的数组...

    基数排序代码.docx

    基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表示字符串(如将数字转换为字符串形式),所以基数排序也可以很自然地扩展到...

Global site tag (gtag.js) - Google Analytics