java排序之基数排序

…衆ロ難τιáo~ 提交于 2020-02-06 18:16:59

基数排序

package q;

import java.util.Arrays;
public class c {
private static void radixSort(int[] array,int d)
{
    int n=1;//代表位数对应的数:1,10,100...
    int k=0;//保存每一位排序后的结果用于下一位的排序输入
    int length=array.length;
    int[][] bucket=new int[10][length];//排序桶用于保存每次排序后的结果,这一位上排序结果相同的数字放在同一个桶里
    int[] order=new int[10];//用于保存每个桶里有多少个数字
    while(n<d)
    {
    	for(int i=0;i<array.length;i++)//将数组array里的每个数字放在相应的桶里
    	{
    		 int digit=(array[i]/n)%10;
             bucket[digit][order[digit]]=array[i];
             order[digit]++;
    	}
        for(int i=0;i<10;i++)//将前一个循环生成的桶里的数据覆盖到原数组中用于保存这一位的排序结果
        {
            if(order[i]!=0)//这个桶里有数据,从上到下遍历这个桶并将数据保存到原数组中
            {
                for(int j=0;j<order[i];j++)
                {
                    array[k]=bucket[i][j];
                    k++;
                }
            }
            order[i]=0;//将桶里计数器置0,用于下一次位排序
        }
        n*=10;
        k=0;//将k置0,用于下一轮保存位排序结果
    }   
}
public static void main(String[] args)
{
    int[] A=new int[]{73,22, 93, 43, 59};
    radixSort(A, 100);
   System.out.println(Arrays.toString(A));
}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!