选择了最简单的冒泡排序
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; } }