本文内容是对基数排序的梳理和总结,本文内容包括:
排序算法十大经典方法
需求描述:现在有一组待排序的数字(如下图所示),要求通过基数排序排序。
第一步:创建10个桶
第二步:按照个位排序
第三步:按照十位排序
第四步:按照百位排序
此时,原数组中的数据已是有序的了
如果下图不动,点击这里查看在线的图解
public static void radixSort(int[] arr)
{
// 找最大位数
int max = 0;
for (int i = 0; i < arr.length; i++) {
max = max < Integer.toString(arr[i]).length() ? Integer.toString(arr[i]).length() : max;
}
// 事先准备10个桶
int[][] buckets = new int[10][arr.length];
// order存储每个桶中存储数据的个数
int[] order = new int[10];
int k = 0;
int n = 1;
int m = 1; //控制排序依据是个位,还是十位,还是百位
while (m <= max) {
// 将数据放入桶中
for (int i = 0; i < arr.length; i++) {
int lsd = ((arr[i] / n) % 10);
buckets[lsd][order[lsd]] = arr[i];
order[lsd]++;
}
// 将桶中的数据放回到原数组中
for (int i = 0; i < 10; i++) {
if (order[i] != 0)
for (int j = 0; j < order[i]; j++) {
arr[k] = buckets[i][j];
k++;
}
order[i] = 0;
}
n *= 10;
k = 0;
m++;
}
}
public static void main(String[] args) {
int[] arr = {53, 3, 542, 748, 14, 214};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
powered by kaifamiao