八大排序算法--基数排序

基数排序定义

基数排序(radix sort)是一种桶排序(bucket sort), 先把个位相同的数字放到同一个桶里,然后完成对个位数字大小的排序,然后再在前面的基础上对十位 上的数字进行排序,然后依次进行到最高位, 最后完成整个排序。

算法分析

对于十进制来说,每个位 总共有 0~9 10 种可能
举一个例子, 对一下数组进行排序:

[34, 62, 11, 56, 4, 73, 2, 25, 38, 65]

首先对个位进行排序(一共有0~9 10个桶):

0 |  
1 | 11
2 | 2, 62
3 | 73
4 | 4, 34
5 | 25, 65
6 | 56
7 | 
8 | 38
9 | 

统计结果如上,然后依次从 0~9 这10个桶中按顺序取出数字后排序,排序结果为

[11,2,62,73,4,34,25,65,56,38]

然后在上面的基础上比较十位, 按照十位这个数字的大小再进行排序:

0 | 2,4
1 | 11
2 | 25
3 | 34,38
4 | 
5 | 52, 56
6 | 65
7 | 73
8 | 
9 | 

然后依次从 0~9 这10个桶中按顺序取出数字后排序,由于最高位是10位,排序结束, 最终排序结果为:

[2, 4, 11, 25, 34, 38, 52, 56, 65, 73]

代码实现

/**
 * 基数排序
 * @param arr 数据
 * @param d 最大位(1、、10、100、1000)
 */
public static void radixSort(int[] arr, int d) {
	
	int length = arr.length;//数据的个数
	//创建一个二维数组,用来作为桶,总有0~9 10个桶,所以一维长度为10
	//最极端的可能就是所有数都装进了一个桶, 所以桶的长度为length,防止装不下
	int[][] bucket = new int[10][length];
	int n = 1;//刚开始从 个位 开始痛排序
	while(n

测试结果

public class SortDemo {
	public static void main(String[] args) {
		int[] arr = randomArray(10);
		radixSort(arr, 100);
		System.out.println(Arrays.toString(arr));
	}
	
	/**
	 * 基数排序
	 * @param arr 数据
	 * @param d 最大位(1、、10、100、1000)
	 */
	public static void radixSort(int[] arr, int d) {
		
		int length = arr.length;//数据的个数
		//创建一个二维数组,用来作为桶,总有0~9 10个桶,所以一维长度为10
		//最极端的可能就是所有数都装进了一个桶, 所以桶的长度为length,防止装不下
		int[][] bucket = new int[10][length];
		int n = 1;//刚开始从 个位 开始痛排序
		while(n

输出结果:

[34, 62, 11, 56, 4, 73, 2, 25, 38, 65]
[2, 4, 11, 25, 34, 38, 56, 62, 65, 73]

你可能感兴趣的:(算法与数据结构)