編程題目:
15.有兩個數組,a[1,3,5,7,9],b[0,2,4,6,8],請將兩個數組合並,並順序排列。
示例代碼:
package program.calculation.exercise15;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;
/**
* 15.有兩個數組,a[1,3,5,7,9],b[0,2,4,6,8],請將兩個數組合並,並順序排列。
*/
public class ArrayCombine {
public static void main(String[] args) {
int[] a = {1,3,5,7,9};
int[] b = {0,2,4,6,8};
int[] arr = new int[a.length+b.length];
combine1(a,b,arr);
combine2(a,b,arr);
int[] array = combine3(a,0,b,0,arr,0);
System.out.println("\n第三種方式:");
for(int n : array){
System.out.print(n+" ");
}
}
private static void combine1(int a[],int b[],int arr[]) {
arr = Arrays.copyOf(a, a.length+b.length);
System.arraycopy(b, 0, arr, a.length, b.length);
Arrays.sort(arr);
System.out.println("第一種方式:");
for (int i=0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
private static void combine2(int a[],int b[],int arr[]) {
Queue<Integer> queue_a = new ArrayDeque<Integer>();
for(int i=0;i<a.length;i++){
queue_a.add(a[i]);
}
Queue<Integer> queue_b = new ArrayDeque<Integer>();
for(int i=0;i<b.length;i++){
queue_b.add(b[i]);
}
for (int i=0;i<arr.length;i++) {
if (!queue_a.isEmpty() && !queue_b.isEmpty()) {
if (queue_a.peek() < queue_b.peek()) {
arr[i] = queue_a.poll();
continue;
}else {
arr[i] = queue_b.poll();
continue;
}
}
if (queue_a.isEmpty() && !queue_b.isEmpty()) {
arr[i] = queue_b.poll();
continue;
}
if (queue_b.isEmpty() && !queue_a.isEmpty()) {
arr[i] = queue_a.poll();
continue;
}
}
System.out.println();
System.out.println("第二種方式:");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
private static int[] combine3(int a[],int a_start,int b[],int b_start,int arr[],int arr_start){
if (a_start >= a.length) {
for (int i=arr_start;i<arr.length;i++) {
arr[i] = b[b_start++];
}
return arr;
}
if (b_start >= b.length) {
for (int i=arr_start;i<arr.length;i++) {
arr[i] = a[a_start++];
}
return arr;
}
if (a[a_start] < b[b_start]) {
arr[arr_start] = a[a_start];
return combine3(a, a_start+1, b, b_start, arr, arr_start+1);
}else {
arr[arr_start] = b[b_start];
return combine3(a, a_start, b, b_start+1, arr, arr_start+1);
}
}
}
結果顯示: