【算法基础(5)】桶排序

从个位开始排,随着高位依次进桶出桶

// arr[begin..end]排序
public static void radixSort(int[] arr, int L, int R, int digit) {
    
    
  final int radix = 10;
  int i = 0,j = 0;
  // 有多少个数准备多少个辅助空间
  int[] buket = new int[R - L + 1];
  for (int d = 1;d < digit; d++) {
    
     // 有多少位就进出几次
    // 10个空间
    // count[0] 当前位(d位)是0的数字有多少个
    // count[1] 当前位(d位)是0~1的数字有多少个
    int[] count = new int[raidx]; // count[0..9]  
    // 词频
    for (i = L;i < R; i++){
    
    
      j = getDigit(arr[i], d)
        count[j]++;
    }
    // 前缀和
    for (i = 1;i< radix; i++) {
    
    
      count[i] = count[i] + count[i - 1];
    }
    // 出桶
    for(i = R;i >= L; i--) {
    
    
      j = getDigit(arr[i], d);
      bucket[count[j] - 1] = arr[i];
      count[j]--;
    }
    // 把出桶的数据放到ARR里
    for (i = L, j=0; i <= R; i++, j++) {
    
    
      arr[i] = bucket[j];
    }
  }
}

猜你喜欢

转载自blog.csdn.net/sinat_29843547/article/details/129796455