ホームページ >Java >&#&チュートリアル >2 つの順序付けシーケンス アルゴリズムをマージする Java 実装例

2 つの順序付けシーケンス アルゴリズムをマージする Java 実装例

黄舟
黄舟オリジナル
2017-09-16 10:44:151488ブラウズ

この記事では、主に Java で 2 つの順序付きシーケンスをマージするアルゴリズムを紹介します。シーケンス マージ アルゴリズムの原理と、Java で順序付きシーケンスをマージするための具体的な操作手順と関連する実装テクニックについて簡単に説明します。この記事

2 つの順序付けされたシーケンス アルゴリズムをマージする Java 実装について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

問題の説明

入力: sequence

A、ここで a0
出力: シーケンス B、その中にb0

アルゴリズムのアイデア

長さrの配列Rを作成し、Aのシーケンスを2つの順序シーケンスとみなします


B= AC=A

比較のために B と C から数値を取得し、小さい方の Put を比較します。数値が B にある場合は、B の次に小さい数値を取り続け、それが C にある場合は、同じことを行います。すべての数値は R です。
Ri=MIN(B)<br><code>Ri=MIN(B)<=MIN(C)?MIN(B):MIN(C)

如果B或C没有更多的数可以获取,则将另一个序列的所有数填制R。

Ri=(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−q=r+1

ここで、r は配列の入力サイズであるため、アルゴリズムの最悪の実行時間は次のようになります:

f(n)=O(n)

デモ結果


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

以上が2 つの順序付けシーケンス アルゴリズムをマージする Java 実装例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。