定义:
-
思想:
-
按位排序(从低位到高位或者从高位到低位)
-
-
场景:
-
手机号码排序
-
实现:
/**
* 基数排序
* 场景:排序电话号码这种类型的 -> 排序ascill码都可以 -> 128个桶即可
*
* @param array
* @return
*/
public static String[] baseSort(String[] array, int length) {
// 1、准备桶,128个桶,存放所有的字符
ArrayList<String>[] buckets = new ArrayList[128];
for (int i = 0; i < 128; i++) {
buckets[i] = new ArrayList<>();
}
// 2、从低位往高位排序
for (int i = length - 1; i >= 0; i--) {
// 将字符串放入合适的桶
for (String s : array) {
buckets[s.charAt(i) - '0'].add(s);
}
// 内层循环排序每一位,重新取回排序好的字符串,放回原数组
int k = 0;
for (ArrayList<String> bucket : buckets) {
for (String s : bucket) {
array[k++] = s;
}
bucket.clear();
}
}
return array;
}
测试:
import sort.Sorted;
import java.util.Arrays;
import java.util.Random;
public class Test {
public static void main(String[] args) {
int[] arr = new int[]{4, 3, 7, 2, 9, 8, 1, 5, 12, 34, 2, 34, 5, 7, 2, 3, 1, -2, 100, -30, -1, -1}; //
// 创建一个空的字符串数组
String[] arr1 = new String[10];
// 随机生成11位电话号码并填充数组
for (int i = 0; i < 10; i++) {
arr1[i] = generatePhoneNumber();
}
Sorted.baseSort(arr1, 11);
System.out.println(Arrays.toString(arr1));
}
public static String generatePhoneNumber() {
StringBuilder phoneNumber = new StringBuilder("1"); // 手机号码第一位通常是1
Random random = new Random();
for (int i = 0; i < 10; i++) {
phoneNumber.append(random.nextInt(10)); // 生成0到9之间的随机数字并拼接到字符串中
}
return phoneNumber.toString();
}
}