JavaA2Z

KAB-studio > プログラミング > JavaA2Z > マージとは

マージ

日本語 併合、合併、融合
英語 merge
ふりがな まーじ
フリガナ マージ

解説

アルゴリズムの一種。
ソートされた配列2つを1つにまとめること。
その際、マージ後の配列ソートされた状態になるようにする。つまり、「ただ単にある配列の後ろに配列をくっつける」わけではなく、並び順がソートされた状態になるようお互いの配列要素を挟み込んでいく。
マージソート」の「マージ」はこれに当たる。
 
Javaにはマージをうためのメソッドは存在しない。
専用のアルゴリズムを作成するか、処理時間を気にしないのであればArrayListクラスに2つの配列を足し、ソートし直すのがいいだろう。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // ソート済みの配列2つを用意します。
        int[] intsL = new int[] { 100, 400, 500 };
        int[] intsR = new int[] { 100, 200, 300, 600 };

        // マージします。
        int[] intsResult = merge( intsL, intsR );

        // 出力します。
        forint iF1 = 0; iF1 < intsResult.length; ++iF1 )
        {
            System.out.println( intsResult[iF1] );
        }
        // 100
        // 100
        // 200
        // 300
        // 400
        // 500
        // 600
    }

    /**
    *   マージします。
    */
    public static int[] merge( int[] intsL, int[] intsR )
    {
        // 出力用の配列を用意します。
        int[] intsResult = new int[intsL.length + intsR.length];
        int intsLPos = 0;
        int intsRPos = 0;

        // それぞれの要素を比較して、小さい方を先にセットします。
        while( intsLPos < intsL.length && intsRPos < intsR.length )
        {
            if( intsR[intsRPos] < intsL[intsLPos] )
            {
                intsResult[intsLPos + intsRPos] = intsR[intsRPos];
                ++intsRPos;
            }
            else
            {
                intsResult[intsLPos + intsRPos] = intsL[intsLPos];
                ++intsLPos;
            }
        }

        // 残りをコピー。
        if( intsLPos >= intsL.length )
        {
            for( ; intsRPos < intsR.length; ++intsRPos )
            {
                intsResult[intsLPos + intsRPos] = intsR[intsRPos];
            }
        }
        else
        {
            for( ; intsLPos < intsL.length; ++intsLPos )
            {
                intsResult[intsLPos + intsRPos] = intsL[intsLPos];
            }
        }

        // 配列を返します。
        return intsResult;
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // ソート済みの配列2つを用意します。
        int[] intsL = new int[] { 100, 400, 500 };
        int[] intsR = new int[] { 100, 200, 300, 600 };

        // マージします。
        int[] intsResult = merge( intsL, intsR );

        // 出力します。
        for( int iF1 = 0; iF1 < intsResult.length; ++iF1 )
        {
            System.out.println( intsResult[iF1] );
        }
        // 100
        // 100
        // 200
        // 300
        // 400
        // 500
        // 600
    }

    /**
    *   マージします。
    */
    public static int[] merge( int[] intsL, int[] intsR )
    {
        // 出力用の配列を用意します。
        int[] intsResult = new int[intsL.length + intsR.length];
        int intsLPos = 0;
        int intsRPos = 0;

        // それぞれの要素を比較して、小さい方を先にセットします。
        while( intsLPos < intsL.length && intsRPos < intsR.length )
        {
            if( intsR[intsRPos] < intsL[intsLPos] )
            {
                intsResult[intsLPos + intsRPos] = intsR[intsRPos];
                ++intsRPos;
            }
            else
            {
                intsResult[intsLPos + intsRPos] = intsL[intsLPos];
                ++intsLPos;
            }
        }

        // 残りをコピー。
        if( intsLPos >= intsL.length )
        {
            for( ; intsRPos < intsR.length; ++intsRPos )
            {
                intsResult[intsLPos + intsRPos] = intsR[intsRPos];
            }
        }
        else
        {
            for( ; intsLPos < intsL.length; ++intsLPos )
            {
                intsResult[intsLPos + intsRPos] = intsL[intsLPos];
            }
        }

        // 配列を返します。
        return intsResult;
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/12/05
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。