堆排序是基于桶排序发展而来的
堆排序是将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。
这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列.
简单来说是准备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;j
l是当前数组的第几个数字 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



