最近看到一個算法題目,覺得很有意義,就自己查資料,摸索着自己實現了代碼,特記錄一下。
題目:有兩個數組a[]和b[],將它們合並成數組c[],需要c[]也是有序數組。
有兩種實現思路:
1. 定義一個新數組,長度為兩個數組長度之和,將兩個數組都copy到新數組,然后排序。
2. 給兩個數組分別定義一個下標,最大長度是數組長度減一,按位循環比較兩個數組,較小元素的放入新數組,下標加一(注意,較大元素對應的下標不加一),直到某一個下標超過數組長度時退出循環,此時較短數組已經全部放入新數組,較長數組還有部分剩余,最后將剩下的部分元素放入新數組,大功告成。
第一種方式應該是大多數人想到的,也比較容易實現,下面主要來實現第二種方式。
代碼如下:
public static int[] MergeList(int a[],int b[])
{
int result[];
// 定義一個新數組,長度為兩個數組長度之和
result = new int[a.length+b.length];
//i:a數組下標 j:b數組下標 k:新數組下標
int i=0,j=0,k=0;
// 按位循環比較兩個數組,較小元素的放入新數組,下標加一(注意,較大元素對應的下標不加一),直到某一個下標等於數組長度時退出循環
while(i<a.length && j<b.length)
if(a[i] <= b[j]) {
result[k++] = a[i++];
print(result);
System.out.println();
}else{
result[k++] = b[j++];
}
/* 后面連個while循環是用來保證兩個數組比較完之后剩下的一個數組里的元素能順利傳入 *
* 此時較短數組已經全部放入新數組,較長數組還有部分剩余,最后將剩下的部分元素放入新數組,大功告成*/
while(i < a.length)
result[k++] = a[i++];
while(j < b.length)
result[k++] = b[j++];
return result;
}