- 基数排序简介
- 实现(java)
- 复杂度和稳定性
1.基数排序简介
非比较排序, 从个位开始, 分配, 收集, 逐位进行计数排序, 桶排序的一种实现
2.实现(java)
public class RadixSort {
public static void main(String[] args) {
int[] arr = {40, 35, 5, 63, 21, 82, 96, 77, 52, 19};
System.out.println("原数组: " + Arrays.toString(arr));
sortArr(arr);
System.out.println("排序后: " + Arrays.toString(arr));
}
public static void sortArr(int[] arr) {
int max = arr[0];
for(int i = 0; i < arr.length; i++) {
if(max < arr[i]) {
max = arr[i];
}
}
for(int exp = 1; max / exp > 0; exp *= 10) {
int[] countArr = new int[10];
int[] tmpArr = new int[arr.length];
for(int i = 0; i < arr.length; i++) {
countArr[arr[i] / exp % 10]++;
}
for(int i = 1; i < countArr.length; i++) {
countArr[i] += countArr[i - 1];
}
for(int i = arr.length - 1; i >= 0; i--) {
int num = countArr[arr[i] / exp % 10];
tmpArr[num - 1] = arr[i];
countArr[arr[i] / exp % 10]--;
}
for(int i = 0; i < arr.length; i++) {
arr[i] = tmpArr[i];
}
}
}
}
3.复杂度和稳定性
排序算法 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
---|---|---|---|---|---|
基数排序 | O(nk) | O(nk) | O(nk) | O(n+k) | 稳定 |