基数排序

       基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

步骤:

 1、建立10个数组:0,1,2,3,4,5,6,7,8,9

 2、第一次按个位排放入数组,再以数组号从小到大取出来

 3、第二次按十位排放入数组,再以数组号从小到大取出来

 4、··········

注意:排序的次数取决于最大的数有几位。

java实现源码:

package myself;

import java.util.Arrays;

public class RodixSort {

	public static void main(String[] args) {
		int a[]= {789,15,2,1,59,2668,595,32985,326,596,59,9,369,56,89,159,753,489};
		rodixSort(a);
		System.out.println(Arrays.toString(a));
	}
	public static void rodixSort(int a[]) {
		//找出数组中最大的数字
		int max=Integer.MAX_VALUE;
		for(int i=0;imax) {
				max=a[i];
			}
		}
		//计算最大数字是几位数
		int maxLength=(max+"").length();
		//用于临时存储数据的数组
		int temp[][]=new int[10][a.length];
		//用于记录在temp中相应的数组中存放的数字数量
		int counts[]=new int[10];
		//根据最大长度的数决定比较的次数
		for(int i=0,n=1;i

 其实不难发现,基数排序在从对应数组中取数的时候是先进先出,和队列进出的形式是一样的,所以也可以通过队列形式做基数排序。

 

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