java实现”MSD基数排序“

一、前言

基数排序,也称分配式排序,在元素数组中,根据元素特性各自分配到适合的”桶“中,根据”桶“来对元素进行排序。MSD排序法,是以高位进行排序选择的排序算法,由高到低,子位再进行递归分配排序,以完成数组的有序重构。

二、逻辑实现

   /**
	 * MSD基数排序
	 */
	public static void MSDjspx() {
		long[] array=new long[]{203,106,302,523,176,302,175,564,462,531,88};
		long maxVal=0;
		List list=new ArrayList<>();//list数组记录所有元素
		for(int i=0;i<array.length;i++) {
			if(maxVal<array[i]) {
				maxVal=array[i];
			}
			list.add(array[i]);
		}
		System.out.println("---数组最大值maxVal:"+maxVal);
		int maxLen=String.valueOf(maxVal).length();
		System.out.println("---数组最大长度maxLen:"+maxLen);
		rtpx(list,maxLen);
		System.out.println("---排序完成后的list:"+list.toString());
	}
	
	/**
	 *  入桶排序
	 * @param list 想要进行入桶排序的数组
	 * @param len 元素排序的依据位数
	 */
	public static void rtpx(List list,int len) {
		if(len==0||list==null||list.size()<2) {//不再进行排序条件
			return;
		}
		Map<Integer,List> map=new HashMap<>();
		for(int i=0;i<10;i++) {//新建0~9的桶容器来存放元素
			map.put(i, new ArrayList());
		}
		for(int i=0;i<list.size();i++) {//元素对应入桶
			String curVal=String.valueOf(list.get(i));
			int curLen=curVal.length();//当前值的长度 
			if(curLen<len){//当前元素长度小于最大长度取0,入桶
				map.get(0).add(list.get(i));
			}else{
				int val=Integer.parseInt(curVal.substring(curLen-len,curLen-len+1));//依据位数的值
				map.get(val).add(list.get(i));
			}
		}
		list.clear();//清空数组
		for(int i=0;i<10;i++) {//元素出桶排序
			List tongList=map.get(i);
			if(tongList.size()>1) {//桶里元素存在1个以上
				rtpx(tongList,len-1);//递归方法改变tongList的排序
			}
			for(int j=0;j<tongList.size();j++) {
				list.add(tongList.get(j));//添加数组,为数组重新排序
			}
		}
	}

三、程序运行

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		MSDjspx();
	}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值