1. 程式人生 > >有兩個有序的資料,將他們合併並保持排序順序不變

有兩個有序的資料,將他們合併並保持排序順序不變

有兩個有序的資料 a[],b[], 他們都是升序的,將他們合併成資料c[] ,要求也是升序的
要求時間複雜度是 O(n)
請考慮邊界條件,避免程式出現異常

package xyz.songxl;

public class mergeArray {
    public static void main(String[] args) {

        int a[] ={1,3,5,7,7,10};
        int b[] ={-2,2 ,100};
        int c[] = merge(a,b);
        for (int i = 0; i < c.length; i++) {
            System.out.print(c[i]+"\t"
); } } /** * <p>有兩個有序的資料 a,b 現在要將他們合併成陣列c,要求也是升序的 * 要求時間複雜度是 O(n) * 請考慮邊界條件,避免程式出現異常 * </p> * @param a * @param b * @return */ public static int[] merge(int a[], int b[]) { int ia = 0,ib = 0,ic=0; // 各陣列的下標 int maxa = a.length; // 個數組的最大長度
int maxb = b.length; int maxc = maxa + maxb; int c[] = new int[maxc]; for ( ; ic < maxc; ic++) { if (ia<maxa && ib<maxb) { // 兩個陣列中都還有元素 比較大小 把小的資料放到陣列c if (a[ia]<= b[ib]) { c[ic] = a[ia]; ia++; }else
{ c[ic] = b[ib]; ib++; } }else if (ia<maxa && ib>=maxb) { // a陣列中還有資料,b 資料沒有了的情況 將a中剩下的資料拷貝到陣列c for ( ; ia < maxa; ia ++,ic++) { c[ic] = a[ia]; } // 或者直接使用資料拷貝函式 arraycopy 實現資料複製的功能 // System.arraycopy(a, ia, c, ic, maxa-ia); }else if (ia>=maxa && ib<maxb) {// b 陣列中還有資料,a 資料沒有了的情況 將b中剩下的資料拷貝到陣列c for ( ; ib < maxb; ib ++,ic++) { c[ic] = b[ib]; } // System.arraycopy(b, ib, c, ic, maxb-ib); } } return c; } }

相關推薦

no