基数排序
2021-07-10 15:06
标签:ret print public least static 实现 out temp 收集 Radix Sorting 稳定 O(d(r+n)) 不需要进行关键字之间的比较、交换、移动,借助分配和收集完成排序 扑克牌 最主位关键字 最次位关键字 最高位优先 most significant digit first 先按照最主位关键字排序,知道最后一个关键字,必须将序列逐层分割成若干个子序列,然后对个子序列分别进行排序 最低位优先least significant digit first 从最次位关键字开始,知道最主位关键字,不必分成子序列,对每一个关键字的排序都是整个序列参加排序,但是,对除最低位关键字之外的关键字进行排序时,必须使用稳定的排序算法 采用LSD实现数组元素排序 先按个位数进行排序,再按十位数进行排序,……,知道最高位 (1)必须知道数组中最大的元素是几位数,最大的元素是几位数,就需要进行几轮比较 (2)将每轮排序的结果放在一个临时数组中 基数排序 标签:ret print public least static 实现 out temp 收集 原文地址:https://www.cnblogs.com/duanjiapingjy/p/9560755.html public static void radioSortLSD(int[] array){
//先按个位数排序,再按十位数排序,直到最高位,因此,必须先知道数组中的最大元素是几位数
//得到数组中最大的元素,最大的元素的位数
int max = getMax(array);
//对每一位进行排序时,必须知道有几个数
//例如,先按照个位数排序,必须知道待排序数组中个位数为0,1,2,3,4,5,6,7,8,9的数分别有几个,暂时将它们存储在一个长度为10 的数组中
//一个数的个位数是几,是该数除以10的余数
//一个数的十位数是几,是该数除以10之后的数再除以10的余数 (x/10)%10
//先按个位数排序,再按十位数排序,直到最高位, 将每次排序的结果先存储在一个临时数组中,然后复制到待排序数组中
for(int div=1;max/div>0;div*=10){
int[] temp = new int[array.length];
int[] count = getCount(array, div);
//count[i]中记录的是当前按照某位数(如个位数)进行排序,该位上的值为i的元素的个数
//调整count[],调整之后,count[i]中的值为该位(如个位数)上的值为i的元素在临时数组中的下标起始值
for(int i=count.length-1;i>=0;i--){
int tempCount = 0;
for(int j=i-1;j>=0;j--){
tempCount += count[j];
}
count[i] = tempCount;
}
System.out.print("count adjuge-----");listArray(count);
for(int i=0;i
上一篇:Java NIO Channel
下一篇:java类中属性优先执行顺序