0
我的目標是編寫一個方法,該方法需要2個字符串數組,並根據每個元素的長度對數組中的元素進行排序。通過使用合併排序?有沒有更簡單的方法來遞歸編寫這段代碼?
這是我有的代碼,但我希望它更濃縮,我不知道這段代碼是遞歸的。
import java.util.Arrays;
import java.util.Comparator;
public class Test {
private static Comparator<String> COMP = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.length() < o2.length()) {
return -1;
}
if(o1.length() > o2.length()) {
return 1;
}
return o1.compareToIgnoreCase(o2);
}
};
public static String[] mergeUnsorted(String[] arr1, String[] arr2) {
arr1 = sort(arr1);
arr2 = sort(arr2);
return merge(arr1, arr2);
}
private static String[] sort(String[] arr) {
if(arr.length <= 1)
return arr;
String[] left = Arrays.copyOfRange(arr, 0, arr.length/2);
String[] right = Arrays.copyOfRange(arr, arr.length/2, arr.length);
left = sort(left);
right = sort(right);
String[] combined = merge(left, right);
return combined;
}
private static String[] merge(String[] arr1, String[] arr2) {
String[] combined = new String[arr1.length + arr2.length];
int a = 0, b = 0, i = 0;
while(a < arr1.length || b < arr2.length) {
int compare = 0;
if(a >= arr1.length) {
compare = 1;
} else if(b >= arr2.length) {
compare = -1;
} else {
compare = COMP.compare(arr1[a], arr2[b]);
}
if(compare < 0) {
combined[i] = arr1[a];
i++;
a++;
} else if(compare > 0) {
combined[i] = arr2[b];
i++;
b++;
} else {
combined[i] = arr1[a];
i++;
a++;
combined[i] = arr2[b];
i++;
b++;
}
}
return combined;
}
public static void main(String[] args) {
String[] arr1 = new String[] { "abc", "a", "A", "bA", "Ba" };
String[] arr2 = new String[] { "def", "d", "D", "fG", "Fg", "abcde", "B" };
System.out.println(Arrays.toString(mergeUnsorted(arr1, arr2)));
}
}
你能在這個代碼看看這裏,看看這可能是更好的 – user1276602 2012-03-19 04:07:34
這段代碼在哪裏? – 2012-03-19 04:09:11
您可以對此進行投票,以便我可以更改它 – user1276602 2012-03-19 04:13:54