/** * 基数排序(桶) * @param arr */ public static void radixSort(int arr []){ int max = Integer.MIN_VALUE; for (int i = 0; i < arr.length; i++) { max = Math.max(max,arr[i]); //得到数组中最大元素的值 } for (int i = 1; max / i > 0; i = i * 10) { //根据max(最大数),判断需要放进桶几次 int [][] buckets = new int[arr.length][10]; //定义每次放入的桶的大小,int[a][b] ,[a]:如果数组中的元素的位数都是一样的,则桶的宽度需要[arr.length],[b]:桶的长度为10,也就是0~9 [10] for (int j = 0; j < arr.length; j++) { int num = (arr[j] / i) % 10; //获得该元素的位数(个,十,百...) buckets[j][num] = arr[j]; //将元素放入桶指定位置 } //将桶中元素依次取出,放入原arr数组中 顺序为:先遍历小的位数的桶中是否有其他元素,之后逐渐增加位数 int k = 0; for (int j = 0; j < 10; j++) { for (int l = 0; l < arr.length; l++) { if(buckets[l][j] != 0){ arr[k++] = buckets[l][j]; //待桶中元素全部放入原数组中,进行下一次遍历,直到10^(i-1)<max<=10^i } } } } }
面试 手写排序算法之基数排序
最新推荐文章于 2024-10-09 22:28:58 发布