Java排序算法——桶排序

方法名:

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

1. 准备桶

ArrayList[] 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 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位

你可能感兴趣的:(java排序算法,java,排序算法,数据结构)