标签:class 利用 bucket 重复 日期 取出 import tps 字符串
基数排序介绍
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。
基数排序 vs 计数排序 vs 桶排序
基数排序有两种方法:
这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:
基数排序步骤
1.找到数据中最大位数的数->可以找到最大数,求其位数
2.按照最低位的数字往0-9十个桶里放,按照数组元素的顺序依次存放
3.按照从小到大,从上到下的顺序依次取出元素,组成新的数组
4.对新数组的次低位重复2、3步骤,直到按照最高位进行2、3步操作,排序完成
时间复杂度
平均时间复杂度 O(n*k)
最坏时间复杂度 O(n*k)
最好时间复杂度 O(n*k)
该算法数据稳定
代码
package Sort;
import java.util.Arrays;
public class RadixSort3 {
public static void main(String[] args) {
int[] arr = {53,3,542,748,14,214};
System.out.println(Arrays.toString(arr));
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr){
//取最大数
int max=arr[0];
for (int i = 1; i < arr.length; i++) {
if(max<arr[i]){
max=arr[i];
}
}
int maxLength=(max+"").length();
int bucket[][]=new int[10][arr.length];
int bucketElementCount[]=new int[10];
for (int i = 0,n=10; i < maxLength; i++,n*=10) {
for (int j = 0; j < arr.length; j++) {
int bucketOfElement=arr[j]/n%10;
bucket[bucketOfElement][bucketElementCount[bucketOfElement]]=arr[j];
bucketElementCount[bucketOfElement]++;
}
int index=0;
for (int k = 0; k < bucketElementCount.length; k++) {
if(bucketElementCount[k]!=0){
for (int j = 0; j < bucketElementCount[k]; j++) {
arr[index++]=bucket[k][j];
}
}
bucketElementCount[k]=0;
}
}
}
}
标签:class 利用 bucket 重复 日期 取出 import tps 字符串
原文地址:https://www.cnblogs.com/youngst/p/14639148.html