基数排序介绍
基数排序思想
基数排序示例
class BasicSort
import java.util.Arrays;
public class BasicSort {
public static void main(String[] args) {
int [] arrays= new int[]{53,542,3,63,14,214,154,748,616};
Long time1=System.currentTimeMillis();
sort(arrays);
Long time2=System.currentTimeMillis();
System.out.println("整个基数排序的过程所用到的时间"+(time2-time1)+"毫秒");
}
/**
* 获取所有的数据中位数最大的数的数位
* @param arrays
*/
public static void sort(int[] arrays){
/**
* 获取最大位数
*/
int max=0;
for (int i=0;i<arrays.length;i++){
if(arrays[i]>max){
max=arrays[i];
}
}
/**
* 我们可以轻易地获取到字符串的,所以我们可以把我们
* 求取的最大的数据转化为字符串来获取我们所求取数位数据的长度
*/
int maxLength=String.valueOf(max).length();
// System.out.println(maxLength);
/**
* 定义二维数组,大小10,表示10个桶,每一个桶则是一个数组
* [[此数租的大小为我们存储数据的数组的大小],[],[],[].....]
*/
int[][] bucket =new int[10][arrays.length];
/**
* 辅助数组
*/
int [] bucketElementCount= new int[10];
/**
* 循环解决基数排序
*/
for(int l=0;l<max;l++){
/**
* 循环获取无序序列
*/
for(int j=0;j<arrays.length;j++){
int locationElement = arrays[j]/(l+1)%10;
/**
* 放入桶中
*/
bucket[locationElement][bucketElementCount[locationElement]]=arrays[j];
bucketElementCount[locationElement]++;
}
/**
* 遍历每一个桶,将元素存放原数组中去
*/
int count=0;
for(int i=0;i<bucketElementCount.length;i++){
if(bucketElementCount[i]!=0){
for (int k=0;k< bucketElementCount[i];k++){
arrays[count]=bucket[i][k];
count++;
}
}
bucketElementCount[i]=0;
}
}
System.out.println("基数排序后的数据"+Arrays.toString(arrays));//数组的输出方法,将数组转化为字符串数组
}
}
运行结果
总结
第一步:对于基数排序我们首先得有要排序的数据
第二步:我们需要一个一维数组来存放这些数据
第三步:我们需要知道我们有多少位数据需要我们排序
第四部:我们需要准备一个二维数组,由于基数排序,二维数大小为[10][需要排序的数据数];
第五步:我们需要准备一个一维的辅助数组,用来确定每一个桶中有多位数据;
第六步:我们可以采用循环来解决将每个数据从个位开始使用二维数组和辅助数组来进行基数排序
第七部:再循环内将二维数组中排好序的数据写回到原数组中去
第八部: 待到for循环结束,我们输出我们基数排序好的数组即可搞定
知识点
System.out.println(“基数排序后的数据”+Arrays.toString(arrays));//数组的输出方法,将数组转化为字符串数组