中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

序列算法怎么利用Java進行合并

發布時間:2020-12-05 15:14:22 來源:億速云 閱讀:129 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關序列算法怎么利用Java進行合并,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

問題描述

輸入:序列A<a0,a1,a2,...aq,aq+1,aq+2,...,ar>,其中a0<a1<...<aq,aq+1<aq+2<...<ar
輸出:序列B<b0,b1,...,br>,其中b0<b1<...<br

算法思想

創建一個長度為r的數組R,將A中的序列看作是兩個有序序列
B=A<a0,a1,a2,...,aq>
C=A<aq+1,aq+2,...,ar>
分別從B和C中拿取一個數進行比較,將較小的放入R,如果這個數在B中,則繼續取B中下一個最小的數;如果在C中,同樣操作。所有數都在R中。
Ri=MIN(B)<=MIN(C)&#63;MIN(B):MIN(C)

如果B或C沒有更多的數可以獲取,則將另一個序列的所有數填制R。

Ri=(MIN(B)MIN(C))

算法實現

/**
 *
 * @author Chuck
 *
 */
public class Merge {
  /**
   * 合并兩個有序序列
   * @param A 待合并序列
   * @param q 第二個序列開始數組下標
   * @return 合并后的新數組
   */
  public static int[] merge(int [] A,int q){
    //創建數組
    int n = A.length;
    int [] R = new int[n];
    int i = 0;
    int j = q+1;
    int k = 0;
    //如果兩個數組B 和 C中都有數據則選擇更小的加入到R中并獲取下一個
    while(i<=q&&j<=n-1){
      if(A[i]<=A[j]){
        R[k]=A[i];
        i++;
      }else{
        R[k]=A[j];
        j++;
      }
      k++;
    }
    //如果B中有數據則把所有數據加入到R中
    while(i<=q) R[k++] = A[i++];
    //如果C中有數據則把所有數據加入到R中
    while(j<n-1) R[k++] = A[j++];
    return R;
  }
  public static void main(String [] args){
    int [] A = {5,6,7,8,9,44,55,66,788,1,3,10,45,59,70,188};
    int q = 8;
    int [] R = Merge.merge(A, q);
    for(int i=0;i<R.length;i++){
      System.out.print(R[i] +" ");
    }
  }
}

算法時間

f(n)=q+1+r&#8722;q=r+1

這里的r是數組的輸入規模,所以算法最壞情形運行時間為:

f(n)=O(n)

演示結果

1 3 5 6 7 8 9 10 44 45 55 59 66 70 188 788

上述就是小編為大家分享的序列算法怎么利用Java進行合并了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三明市| 翁源县| 康保县| 社旗县| 福安市| 鄂伦春自治旗| 深水埗区| 澎湖县| 南安市| 鲜城| 九江县| 微博| 太谷县| 黔江区| 兰溪市| 米易县| 临西县| 民县| 平果县| 工布江达县| 松滋市| 宣威市| 内丘县| 渭南市| 黄龙县| 阳东县| 通城县| 永泰县| 浑源县| 汤原县| 闻喜县| 宜川县| 阳春市| 高碑店市| 乌什县| 琼海市| 包头市| 高陵县| 赣榆县| 泸西县| 吉林省|