选择了最简单的冒泡排序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
char[] chars = (in.next() + in.next()).toCharArray();
sort(chars);
for (int i = 0; i < chars.length; i++) {
if (isHexChar(chars[i])) {
chars[i] = int2char(reverse(char2Int(chars[i])));
}
}
System.out.println(String.valueOf(chars));
}
static void sort(char[] chars) {
for (int i = 0; i < chars.length; i++) {
for (int j = 0, k = 1; j + 2 < chars.length - i ||
k + 2 < chars.length - i; j += 2, k += 2) {
if (j + 2 < chars.length - i && chars[j] > chars[j + 2]) {
swap(chars, j, j + 2);
}
if (k + 2 < chars.length - i && chars[k] > chars[k + 2]) {
swap(chars, k, k + 2);
}
}
}
}
static boolean isHexChar(char c) {
return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F');
}
static char int2char(int i) {
if (0 <= i && i <= 9) {
return (char)(i + '0');
}
return (char)(i - 10 + 'A');
}
static int char2Int(char c) {
if ('0' <= c && c <= '9') {
return c - '0';
}
return c - ((c < 'a') ? 'A' : 'a') + 10;
}
static int reverse(int n) {
int fst = (1 << 3) & n;
int snd = (1 << 2) & n;
int trd = (1 << 1) & n;
int foth = 1 & n;
if (!((fst > 0 && foth > 0) || (fst == 0 && foth == 0))) {
fst >>= 3;
foth <<= 3;
}
if (!((snd > 0 && trd > 0) || (snd == 0 && trd == 0))) {
snd >>= 1;
trd <<= 1;
}
return fst | snd | trd | foth;
}
static void swap(char[] arr, int i, int j) {
char temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}

京公网安备 11010502036488号