堆排序是基于桶排序发展而来的
堆排序是将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。
这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列.
简单来说是准备0到9号10个桶
数组里面的数字的最后一位是几就放到几号桶里面,
全部放完就按桶的顺序再把那些数字都拿出来
然后按这样的规则放倒数第二位 直到位数最多的那个数的全部位数都进行过这样的运算
将数组传入到排序函数中去
public static void main(String[] args) { int arr[] ={53,3,542,78,214}; Sort(arr);//sort就是基数排序 }
下面是排序的实现
public static void Sort(int arr[]){ int max=0; for (int i=0;imax){ max=arr[i]; } } int maxLength=(""+max).length(); int bucket[][] =new int [10][arr.length]; int [] bucketElementCounts=new int [10]; for (int j=0,n=1;j上面的排序一共有三个部分分别是
1.找最大值然后输出最大值一共有几位int max=0; for (int i=0;imax){ max=arr[i]; } } int maxLength=(""+max).length();在一个循环中执行2,3步 循环的次数就是数组中最大数的位数
2.把数组的数字放到桶里面
3.把桶里面的数字拿出来for (int j=0,n=1;jl是当前数组的第几个数字 number是为了得到当前位数的数字
bucketElementCounts[]是个一位数组
它是为了记录桶里面有几个数字
比如bucketElementCounts[0]=1 就是0号桶里面有1个数字for(int l=0;l< arr.length;l++){ int number =arr[l] / n % 10; bucket[number][bucketElementCounts[number]]=arr[l]; bucketElementCounts[number]++; }
下面这是为了把桶里面的数字给重新放回到数组里面
int port=0; for (int k=0;k<10;k++){ if(bucketElementCounts[k]!=0){ for(int l=0;l欢迎分享,转载请注明来源:内存溢出
评论列表(0条)