[java]代码库
/**
* 按照给定排序规则排序,规则没给出的按默认排序。
*/
public class DiySort {
public static void main(String[] args) {
// 待排序数组 w1 b1 Bb Ba 5f 6G kk 1p UG 8y
char arr[] = { 'w', '1', 'b', '1', 'B', 'b', 'B', 'a', '5', 'f', '6',
'G', 'k', 'k', '1', 'p', 'U', 'G', '8', 'y' };
// 排序规则 j<a<G<g<8<r<D<f<U<b<W
char rule[] = { 'j', 'a', 'G', 'g', '8', 'r', 'D', 'f', 'U', 'b', 'W' };
int[] p = new int[arr.length]; // arr排序后,每个字符在规则rule中的位置,-1表示默认规则
for (int i = 0; i < arr.length; i++) {
p[i] = -1;
}
// 临时变量
char tmp_char;
int tmp_int;
// arr排序
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
// 分别找到arr中每个字符在rule中的位置
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < rule.length; j++) {
if (arr[i] == rule[j]) {
p[i] = j;
}
}
}
// 按照给定规则rule排序
for (int i = 0; i < p.length; i++) {
if (p[i] == -1) {
continue;
}
for (int j = i + 1; j < p.length; j++) {
if (p[j] == -1) {
continue;
}
if (p[i] > p[j]) {
tmp_char = arr[i];
arr[i] = arr[j];
arr[j] = tmp_char;
tmp_int = p[i];
p[i] = p[j];
p[j] = tmp_int;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}