マージ
| 日本語 | 併合、合併、融合 |
| 英語 | merge |
| ふりがな | まーじ |
| フリガナ | マージ |
アルゴリズムの一種。
ソートされた配列2つを1つにまとめること。
その際、マージ後の配列もソートされた状態になるようにする。つまり、「ただ単にある配列の後ろに配列をくっつける」わけではなく、並び順がソートされた状態になるようお互いの配列の要素を挟み込んでいく。
「マージソート」の「マージ」はこれに当たる。
Javaにはマージを行うためのメソッドは存在しない。
専用のアルゴリズムを作成するか、処理時間を気にしないのであればArrayListクラスに2つの配列を足し、ソートし直すのがいいだろう。
ソートされた配列2つを1つにまとめること。
その際、マージ後の配列もソートされた状態になるようにする。つまり、「ただ単にある配列の後ろに配列をくっつける」わけではなく、並び順がソートされた状態になるようお互いの配列の要素を挟み込んでいく。
「マージソート」の「マージ」はこれに当たる。
Javaにはマージを行うためのメソッドは存在しない。
専用のアルゴリズムを作成するか、処理時間を気にしないのであればArrayListクラスに2つの配列を足し、ソートし直すのがいいだろう。
参考サイト
// 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;
}
}
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;
}
}
// 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;
}
}




