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;
}
}
分享到:
相关推荐
排序算法中的基数排序,更重要的是会算时间复杂度,基数排序可以说是以计数排序位基础的,只不过变成了一位一位来或者一个字节一个字节来,每位或者每个字节都过了一遍,则排序完毕。很简单的程序,在code::block IDE...
Java基数排序Radix Sort原理及用法解析 Java基数排序Radix Sort是一种高效的稳定性排序算法, thuộc於“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort。顾名思义,它是通过键值的...
经典排序算法 – 基数排序Radix sort 原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个...
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种排序方法对于大数据量的处理非常有效,尤其适合于数据范围远大于内存大小的情况。以下是基数排序的详细...
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)是一种非比较型整数排序算法,其效率高于基于比较的传统排序算法。本文将深入探讨基数排序的基本原理及其程序实现。 #### 基数排序概述 基数排序通过按位对整数进行排序来工作。它首先按照...
经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonhole sort 经典排序算法 - 归并排序Merge sort 经典排序算法 - 冒泡排序Bubble sort 经典排序算法 - 选择排序Selection sort 经典排序算法 - ...
基数排序是一种非比较排序算法,其基本思想是将整数按位数切割成不同的数字,然后按每个位数分别进行排序。
基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别进行排序。以下是对基数排序原理及应用的详细解释: 基数排序的原理 1. 数位排序:基数排序从最低位...
基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,需要将关键字拆分成数字位。并且按照数字位的值对数据项进行排序,这种方法不需要进行比较操作。 为了尽可能少的...
**基数排序(Radix Sort)**是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。这种算法对于大数据量的排序非常有效,尤其是在数据范围较大的情况下,其时间复杂度可以...
在`基数排序Radix_sort.cpp`中,我们可以看到如何利用这个原理实现排序过程。 其次,堆排序是一种基于比较的排序算法,它通过构建一个大顶堆或小顶堆来完成排序。堆是一种特殊的树形数据结构,其每个父节点的值都...
基数排序(Radix Sort)是一种非比较型的整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表示字符串、卡片等数据(当成是整数即可),所以基数排序并不限于整数。它是...
1. 计数排序(Counting Sort)基数排序: 计数排序本身是一种非比较型排序,适用于排序非负整数。在基数排序中,我们从最低有效位(个位)开始,到最高有效位(高位)结束。对于每一位,我们创建一个大小为10的数组...
基数排序(Radix Sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表示字符串(如将数字转换为字符串形式),所以基数排序也可以很自然地扩展到...