【排序|Java排序算法(八)--基数排序(RadixSort)】基数排序:需要借助radix个队列来暂时存储元素。
思想:
1.new一个元素为LinkedList的queue,用来存放各个基数的队列;
2.新建radix个元素为整数的queue1(命名一样),均存放在queue中;
3.根据最大元素的位数,对数组进行max_digits次分配和收集;
4.从低位到高位,计算data[j]的该位上的值r,放在queue中的第r个LinkedList中(需要借助临时的Linkedlist表queue2);
5.根据每一位的分配完成后,将LinkedListqueue中的数据从前到后收集起来一次(即对数组进行了一次排序)。
import java.util.LinkedList;
publicstaticvoidradixSort (int[]data,intradix,intdigits){ //radix表示基数(进制),digits表示最大数值位数
LinkedList queue= new LinkedList();
for(int r =0;
r queue1= new LinkedList ();
queue.offer( queue1);
//offer用于queue中(Linkedlist同时实现了List和queue接口),add用于List中
}
//最大元素的位数,进行digits次分配和收集
for(int i =0;
i queue2=queue .get(r );
queue2.offer( data[ j]);
queue.set( r, queue2);
}
//将收集队列元素
int count =0;
for(int k =0;
k 0){
data[ count++]=(Integer) queue.get( k).poll();
}
}
}
}
推荐阅读
- Codeforces|Codeforces Round #643 (Div. 2) B.Young Explorers
- 笔记|几种面试常见排序的实现
- 暴力|最大最小公倍数
- Python3|Python语言实现多关键字排序问题
- Java|编码中的小技巧之防止数据溢出
- c语言程序|基数排序C语言代码实现
- 面试|一千万以内的自守数