分割して征服することにより、ソートをマージすることは、並べ替えを意味します。
(1)配列を2つの小さな配列に分割し、個別にソートします。
(2)次に、分離された適切な注文の配列をマージします。
コードコピーは次のとおりです。
Java.util.scannerをインポートします。
パブリッククラスmergesort {
int [] a = null;
int [] b = null;
int n;
スキャナーsin = null;
mergesort()
{
a = new int [10000];
b = new int [10000];
sin = new Scanner(system.in);
}
void sort(int start、int end)// [start ... end] sort
{
int mid;
if(start> = end)//要素が1つしかない場合、直接返します
戻る ;
それ以外
{
mid =(end-start)/2;
ソート(開始、開始+ミッド);
ソート(Start+Mid+1、End);
// 2つの順序付き配列a [start ... start+mid]と[start+mid+1 ... end]を結合します
マージ(開始、開始+ミッド、エンド);
}
}
void Merge(int start、int mid、int end)//組み合わせ
{
int t = start;
int i = start、j = mid+1;
while(i <= mid && j <= end)
{
if(a [i] <a [j])
b [t ++] = a [i ++];
それ以外
b [t ++] = a [j ++];
}
while(i <= mid)
b [t ++] = a [i ++];
while(j <= end)
b [t ++] = a [j ++];
for(i = start; i <= end; i ++)//ソートされたコンテンツを配列の対応する位置に書き戻しますa
a [i] = b [i];
}
void run()
{
system.out.print( "ソートされる番号の数を入力:");
n = sin.nextint();
for(int i = 0; i <n; i ++)
a [i] = sin.nextint();
ソート(0、n-1);
system.out.println( "並べ替え結果は:");
//ソートするデータを入力します
for(int i = 0; i <n; i ++)
system.out.println(a [i]+"");
}
public static void main(string [] args){
new mergesort()。run();
}
}