排序算法之基数排序

  基数排序

Posted by     DH on August 7, 2017

思想 

基数排序首先按照个位数的值进行装桶,个位数的相同的数装进一个桶,然后从第0个桶开始取,取到第9个桶,将数组重新装进数组,在按照这种方式对十位、百位,直到最高位进行操作。

例子

例子如下图所示:

代码

package test;

import java.util.Arrays;

public class RadixSort {

	public static void main(String[] args) {
		int[] A=new int[]{73,22, 93, 43, 55, 14, 28, 65, 39};
		RadixSort radixSort = new RadixSort();
		radixSort.radix(A, 10);
		System.out.println(Arrays.toString(A));
	}

	// 参数d表示最高位,如果数组中所有元素的最高位是十位,那么d就是10,最高位是百位,就是100
	public void radix(int [] a,int d){
		int division = 1; // 对应的位数1,10,100...
		int [] count = new int [10]; // 存储每个桶中的元素的个数
		int [][] bucket = new int[10][a.length];// 保存每次排序之后的结果
		
		while(division <= d){
			// 存数据
			for(int i=0;i<a.length;i++){
				int digit = (a[i] / division) %10; // 取得对应位上的值
				bucket[digit][count[digit]] = a[i];
				count[digit] ++;
			}
			
			int k =0;
			// 取数据
			for(int i= 0;i<10;i++){
				for(int j =0;j<count[i];j++){
					a[k] = bucket[i][j];
					k++;
				}
				count[i] = 0;
			}
			
			division *= 10;
			
		}
	}
}