算法思想
思想:
通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。
=>将所有的待比较数值统一为同样的数位长度,数位较短的数前面补0。然后,从最低位开始,依次进行排序(每一位进行一次,一共有多少位,就进行多少次排序)。
基数排序的实现思路:
-
用于排序过程的“桶”
- 假设用于排序的数均为正整数,那么在这里设置桶的个数为10。又因为每个桶,实际上也是一个一维数组。
所以,定义一个二维数组,来实现排序过程中对于“桶”的要求:
int[][] bucket = new int[10][arr.length]; - 在每趟排序过程中,每个桶中存储的有效元素的个数,也是需要记录的。
可以定义一个一位数组,来记录每个桶中所存储的有效元素的个数:
int[] bucketElementCounts = new int[bucket.length];
- 假设用于排序的数均为正整数,那么在这里设置桶的个数为10。又因为每个桶,实际上也是一个一维数组。
-
确定对arr[]中的元素实现排序,一共需要进行排序的趟数:
- 在基数排序中,需要进行的排序的趟数 == arr[]中最大的数 的位数
-
排序过程的实现:
- 每趟排序过程主要分为两步:
1)将元素依据 该趟排序所参照的数位 上的值,放入到对应的桶中
2)按照放入桶中的顺序,从桶中依次取出对应元素的值,放回到arr[]中
- 每趟排序过程主要分为两步:
算法实现
//实现基数排序
public static void radixSort(int[] arr) {
//定义一个二维数组,来实现排序过程中对于“桶”的要求
int[][] bucket = new int[10][arr