一、什么是基数排序
基数排序属于分配式排序,又称桶子法。它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。
二、时间复杂度
基数排序的时间复杂度为o(nlog(r)m) 其中r为所采取的基数m为堆数
三、配图
有这样一个数组
先从百位开始排序,不足百位前面补0
再从十位开始排序,不足十位前面补0
得出最终结果
四、主要代码(java形式)
public static void sort(int[] arr) {
int[][] bucket = new int[10][arr.length]; // 定义桶
int[] elementCount = new int[10]; //定义桶的记录
System.out.println("-----------------------");
//将数据放入到桶内
for(int i = 0;i<arr.length;i++) {
int element = arr[i] % 10; //计算出每个数据的个位值
bucket[element][elementCount[element]] = arr[i];
elementCount[element] ++;
}
//取出数据
int index = 0;
for(int k = 0;k<elementCount.length;k++) {
if(elementCount[k] != 0) {
for(int h = 0;h<elementCount[k];h++) {
arr[index] = bucket[k][h];
index ++;
}
}
elementCount[k] = 0; // 清空桶记录
}
System.out.println("----------------------------");
//将数据放入到桶内
for(int i = 0;i<arr.length;i++) {
int element = arr[i] / 10 % 10; //计算出每个数据的十位值
bucket[element][elementCount[element]] = arr[i];
elementCount[element] ++;
}
//取出数据
int index1 = 0;
for(int k = 0;k<elementCount.length;k++) {
if(elementCount[k] != 0) {
for(int h = 0;h<elementCount[k];h++) {
arr[index1] = bucket[k][h];
index1 ++;
}
}
elementCount[k] = 0; // 清空桶记录
}
System.out.println("--------------------------------");
//将数据放入到桶内
for(int i = 0;i<arr.length;i++) {
int element = arr[i] / 100 % 10; //计算出每个数据的百位值
bucket[element][elementCount[element]] = arr[i];
elementCount[element] ++;
}
//取出数据
int index2 = 0;
for(int k = 0;k<elementCount.length;k++) {
if(elementCount[k] != 0) {
for(int h = 0;h<elementCount[k];h++) {
arr[index2] = bucket[k][h];
index2 ++;
}
}
elementCount[k] = 0; // 清空桶记录
}
}
}