基数排序
一、概念
基数排序(raddix sort)首先按照个位数的值进行装桶,个位数相同的数装进一个桶,然后从第0个桶开始取,取到第9个桶,将数组重新装进数组,在按照这种方式对十位、百位,直到最高位进行操作。
二、复杂度
排序方法 | 最差时间分析 | 最好时间分析 | 平均时间复杂度 | 空间复杂度 | 稳定性 |
基数排序 | O(d(n+m)) | O(d(n+m)) | O(d(n+m)) | O(m) | 稳定 |
三、代码实现
1 import java.util.Arrays; 2 3 public class RadixSort { 4 public static void main(String[] args) { 5 int a[] = {11,7,6,1,8,4,3,2}; 6 redixsort(a,10); 7 System.out.println(Arrays.toString(a)); 8 } 9 /** 10 * 基数排序 11 * @param array 12 * @param d 表示最高位,如果数组中所有的元素的最高位是10位,那么d就是10位, 13 * 最高位是100,d就是100 14 */ 15 public static void redixsort(int[] array , int d){ 16 int division = 1;//对应的数分别为1,10,100 17 int[] count = new int[10];//存储每个桶中元素的个数 18 int[][] bucket = new int[10][array.length];//保存每次排序之后保存的结果 19 20 while(division <= d){ 21 //存数据到桶中 22 for(int i = 0; i < array.length; i++){ 23 int digit = (array[i]/division)%10;//取得对应桶位置的值 24 bucket[digit][count[digit]] = array[i]; 25 count[digit]++; 26 } 27 int k = 0; 28 //取数据 29 for(int i = 0; i <10; i++){ 30 for(int j = 0; j < count[i]; j++){ 31 array[k] = bucket[i][j]; 32 k++; 33 } 34 count[i] = 0; 35 } 36 division *= 10; 37 } 38 } 39 }