平日所见的基数排序基本都是讲正整数的,没有讲到负数的,所以今天写一个可解决负数情况的基数排序。 首先,我们可以加上某个值,使得数组中肯定不会出现负数,然后这样我们就可以按照以前基数排序的套路进行排序了。 因为基数排序需要找到最大值,所以我们可以在寻找最大值的同时也寻找最小值。废话不多说,上代码。 public int[] radixSort(int[] arr){ int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for (int i = 0; i < arr.length; i++) { max = Math.max(max, arr[i]); min = Math.min(min, arr[i]); } if (min<0) { //如果最小值小于0,那么把每个数都减去最小值,这样可以保证最小的数是0 for (int i = 0; i < arr.length; i++) { arr[i] -= min; } } max -= min; //!max也要处理! int maxLength = (max+"").length(); int[][] bucket = new int[10][arr.length]; int[] bucketElementCount = new int[10]; for (int i = 0 ,n = 1 ; i < maxLength ; i++,n*=10) { for (int j = 0; j < arr.length ; j++) { int value = arr[j]/n % 10; bucket[value][bucketElementCount[value]] = arr[j]; bucketElementCount[value]++; } int index = 0; for (int j = 0; j < bucketElementCount.length ; j++) { if (bucketElementCount[j]!=0){ for (int k = 0; k < bucketElementCount[j]; k++) { arr[index] = bucket[j][k]; index++; } } bucketElementCount[j] = 0; } } if (min<0){ for (int i = 0; i < arr.length ; i++) { arr[i] += min; } } return arr; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算