code: private int[] getCharWeightedOrder_Alphabet(int[] buckets, int bucketsInLevel2Bucket) {
          int alphabetSize = alphabet.size;
          int[] charWeight = new int[alphabetSize];
          int tmpBucketFactor = bucketsInLevel2Bucket * (alphabetSize + 1);
          int i;
          for (i = 0; i < alphabetSize; i++) {
              charWeight[i] = alphabet.charFreq[i];
              charWeight[i] -= buckets[i * tmpBucketFactor + bucketsInLevel2Bucket]
                  - buckets[i * tmpBucketFactor];
          }
  
          int[] targetCharArray = new int[alphabetSize + 1];
          for (i = 0; i < alphabetSize; i++) {
              targetCharArray[i] = i;
          }
          for (i = 1; i < alphabet.size; i++) {
              int tmpWeight = charWeight[i];
              int j = i;
              while (j > 0 && tmpWeight < charWeight[targetCharArray[j - 1]]) {
                  targetCharArray[j] = targetCharArray[j - 1];
                  j--;
              }
              targetCharArray[j] = i;
          }
          return targetCharArray;
      }
docs: Sorts the alphabet concerning some weight concerning cc bucket size and alphabet
  frequency Only works for mapped string with alphabet [0,alphaSize]
  
  @param buckets               - the bucket table
  @param bucketsInLevel2Bucket - number of subbuckets of level-2 buckets
  @return the order of the alphabet according to the weight on buckets with same
  first and second character