/**
* @Author: zzl
* @createTime 05 11:49
* @description
*
* 基数排序 这个排序算法稳定的 基本思想是 分割每个位数 然后通过一次一次的分桶 进行排序 数字
*
*/
public class RadixSort {
public static void main(String[] args) {
Random random = new Random();
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = random.nextInt(1000);
}
int[] sort = sort(arr);
System.out.println(Arrays.toString(sort));
}
// 先求出数组中最大的数
static int[] sort(int[] arr){
int max = arr[0];
for (int i = 0; i < arr.length; i++) max =max <= arr[i]? arr[i]: max;
//得到最大数是几位数 获取长度 就是
int manLength = (max+"").length();
//
int[] result = new int[arr.length];
int[] count = new int[10];
for (int i = 0; i < arr.length; i++) {
int division =(int)Math.pow(10,i);
// System.out.println(division);
for (int j = 0; j < arr.length; j++) {
int num = arr[j]/division % 10;
// System.out.println(num +" ");
count[num]++;
}
// System.out.println();
// System.out.println(Arrays.toString(count));
for (int m = 1; m < count.length; m++) {
count[m] = count[m] + count[m-1];
}
// System.out.println(Arrays.toString(count));
for (int n = arr.length - 1; n >=0; n--) {
int num = arr[n]/division % 10;
result[--count[num]] =arr[n];
}
System.arraycopy(result,0,arr,0,arr.length);
Arrays.fill(count,0);
}
return result;
}
}
简单快排-基数排序
最新推荐文章于 2024-05-31 10:46:10 发布