Java排序算法——桶排序

方法名:

public static void radixSort(String[] a, int length) {}

1. 准备桶

ArrayList<String>[] buckets = new ArrayList[10];//[128]
		for (int i = 0; i < buckets.length; i++) {
			buckets[i] = new ArrayList<>();
		}

// [128] —— 如果排序的字符串不仅包含数字字符,还包含英文字符,加减乘除等一些符号,范围在ASCII码之内(0~127)之间,可以把长度改成128,包含0~127。

2. 进行多轮按桶位排序

// 2. 进行多轮按位桶排序
		for (int i = length - 1; i >= 0; i--) {
			//将字符串放入合适的桶
			// '0' -> 48
			// '1' -> 49
			for (String s : a) {
                buckets[s.charAt(i) - '0'].add(s);  //buckets[s.charAt(i)].add(s);
			}

用charAt(i)取到的字符  减去  '0'或者48  可以得到字符索引位置

// buckets[s.charAt(i)].add(s); ——使用[128]时使用

3. 取出放在桶里的字符串,放回原始数组并打印

//重新取出排好序的字符串,放回原始数组
			int k = 0;
			for (ArrayList<String> bucket : buckets) {
				for (String s : bucket) {
					a[k++] = s;
				}
				bucket.clear();
			}
			System.out.println(Arrays.toString(a));

bucket.clear(); —— 使用完桶之后要清空桶里的数据

4. 测试

public static void main(String[] args) {

		String[] phoneNumbers = new String[6];
		phoneNumbers[0] = "15845236785";
		phoneNumbers[1] = "15171425368";
		phoneNumbers[2] = "13543486428";
		phoneNumbers[3] = "13845385347";
		phoneNumbers[4] = "13943548386";
		phoneNumbers[5] = "15943779314";

		RadixSort.radixSort(phoneNumbers, 11); //0~127
		for (String phoneNumber : phoneNumbers) {
			System.out.println(phoneNumber);
		}
	}

// 0~127 因为手机号是11位

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值