在众多的排序方法中基数排序比较特殊,它是一种不需要进行关键字之间比较的排序方法,利用多关键字的划分,逐渐将待排序列排好序。
举个例子:
现在有数组:278,109,63,930,589,184,505,269,8,83
第一次根据各位数将数组划分为10个队列(当然其中的某些队列可能不含有元素)
0:930
1:
2:
3:63,83
4:184
5:505
6:
7:
8:278,8
9:109,589,269
然后收集成序列:
930,63,83,184,505,278,8,109,589,269
在进行第二次分组:
0:505,8,109
1:
2:
3:930
4:
5:
6:63,269
7:278
8:83,184,589
9:
第二次收集:
505,8,109,930,63,269,278,83,184,589
第三次分配:
0:8,63,83
1:109,184
2:278,269
3:
4:
5:505,589
6:
7:
8:
9:930
最后得到序列:
8,63,83,109,184,269,278,505,589,930
完成排序!
基数排序其实是利用多关键字先达到局部有序,再调整达到全局有序。
public static void radixSort(int[] array){
//首先确定排序的趟数;
int max=array[0];
for(int i=1;i<array.length;i++){
if(array[i]>max){
max=array[i];
}
}
int time=0;
//判断位数;
while(max>0){
max/=10;
time++;
}
//建立10个队列;
LinkQueue<Integer>[] queue=new LinkQueue[10];
for(int i=0;i<10;i++){
queue[i]=new LinkQueue<Integer>();
}
//进行time次分配和收集;
for(int i=0;i<time;i++){
//分配数组元素;
for(int j=0;j<array.length;j++){
//得到数字的第time+1位数;
queue[array[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i)].enQueue(array[j]);
}
int count=0;//元素计数器;
//收集队列元素;
for(int k=0;k<10;k++){
while(queue[k].size()>0){
array[count]=(Integer) queue[k].deQueue().getElement();
count++;
}
}
}
}
如果待排序列的关键字不是自然数,我们当然可以对其进行转化,然后利用类似的方式排序。
<!--EndFragment-->
分享到:
相关推荐
以下是Java实现基数排序的基本步骤: 1. **确定最大数和位数**:首先,我们需要找出数组中的最大数,以确定需要处理的位数。例如,如果数组中最大数为999,那么需要处理3位。 2. **创建辅助数组**:为了实现排序,...
### Java实现基数排序算法 #### 实现原理 基数排序是一种非常高效的非比较型整数排序算法,它通过按数字的各个位数进行排序来实现序列的整体有序化。该算法的关键在于能够有效地处理多位数,避免了传统的两两比较...
Java实现基数排序通常涉及两个关键部分:位处理函数和桶操作。位处理函数负责根据当前位数分配元素,而桶操作则处理元素的收集和排放。以下是一个简单的Java实现示例: ```java import java.util.ArrayList; import...
基数排序的关键思想是按照数字的个位、十位、百位等逐个进行计数排序,从最低位到最高位。在每个位上,使用计数排序来稳定地排序数组。通过多次迭代,对所有位进行排序后,最终得到有序的数组。 在示例代码中,我们...
- `radixSort()`:这是实现基数排序的主要方法,接受一个整数数组作为参数。 - `countingSort()`:这是一个内部方法,用于执行基于某一位置的计数排序。 - `getDigit()`:此方法用于获取给定数字在特定位上的值,...
该资源提供了在Java中如何实现基数排序的全面指南。文档涵盖了基数排序的基本概念,包括如何对数组进行排序以及如何在Java中实现基数排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现基数排序,包括详细...
自己写的插入排序,随机产生1000次,每次产生0-1000个数,验证算法正确性。java实现。
基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,需要将关键字拆分成数字位。并且按照数字位的值对数据项进行排序,这种方法不需要进行比较操作。 为了尽可能少的...
"Java语言实现基数排序代码分享" 基数排序是非比较排序算法,通过对数字的每个位数进行排序从而实现对整个数字的排序。Java语言实现基数排序代码分享是通过使用基数排序算法来对整数数组进行排序。 1. 基数排序...
Java实现基数排序通常涉及多步,每步按一位数字进行排序: ```java void countingSort(int[] arr, int exp) { int n = arr.length; int[] output = new int[n]; int[] count = new int[10]; Arrays.fill(count...
Java实现基数排序时,需要处理每一位的排序。 以上就是"Java各种排序算法代码"所涵盖的主要内容,每种排序算法都有其适用场景和性能特点,理解并熟练掌握这些算法,对于提升Java编程能力,优化程序性能具有重要意义...
基数排序的Java实现方法RadixSort,简单易懂,适合算法初学者。
下面将详细介绍标题和描述中提到的一些常见排序算法,并提供Java实现。 1. 插入排序(Insertion Sort) 插入排序是一种简单直观的排序算法,它的工作原理类似于打扑克牌。对于未排序序列,每次将一个元素插入到已...
在 Java 中,基数排序可以通过以下步骤来实现: 1. 首先,找到输入数组中的最大值,并计算最大值的位数。 2. 创建一个大小为 10 的桶列表,用于存储每个桶中的元素。 3. 依次遍历输入数组,将每个元素按照其个位、...
下面是一个简单的Java实现,展示了如何使用基数排序对整数数组进行排序: ```java public class RadixSort { public static void radixSort(int[] arr) { int max = getMax(arr); int exp = 1; while (max / ...
下面是一个基于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实现版本,直接插入排序、折半插入排序、冒泡排序、简单选择排序、希尔插入排序、快速排序 、堆排序、2-路归并排序 、基数排序,并有时间比较,博文...
八种排序算法原理及Java实现是排序算法中的一种,包括冒泡排序、快速排序、直接插入排序、希尔排序、选择排序、归并排序和基数排序等。 冒泡排序是八种排序算法中的一种,属于交换排序。冒泡排序的基本思想是重复...
Java实现如下: ```java public class InsertionSort { public static void sort(int[] arr) { for (int i = 1; i ; i++) { int key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] =...
JAVA中实现基数排序可以使用多路归并,先按个位排序,再按十位,直至最高位,其时间复杂度为O(kn),其中k是数字的最大位数。 5. **选择排序**:选择排序每次找到当前未排序部分的最小(或最大)元素,放到已排序...