Gabungkan penyortiran berarti menyortir dengan membagi dan menaklukkan:
(1) Bagilah array menjadi dua array kecil dan urutkan secara terpisah;
(2) kemudian gabungkan array yang terpisah dari perintah yang disortir dengan baik;
Salinan kode adalah sebagai berikut:
impor java.util.scanner;
MergeSort kelas publik {
int [] a = null;
int [] b = null;
int n;
Pemindai Sin = NULL;
MergeSort ()
{
a = int baru [10000];
b = int baru [10000];
sin = pemindai baru (System.in);
}
void sort (int start, int end) // urutkan [start ... end]
{
int mid;
if (start> = end) // ketika hanya ada satu elemen, kembalikan langsung
kembali ;
kalau tidak
{
mid = (end-start)/2;
urutkan (mulai, mulai+mid);
urutkan (mulai+mid+1, end);
// gabungkan dua array yang dipesan [mulai ... mulai+mid] dan [start+mid+1 ... end]
gabungan (mulai, mulai+pertengahan, akhir);
}
}
void gabungan (int start, int mid, int end) // kombinasi
{
int t = mulai;
int i = mulai, j = mid+1;
while (i <= mid && j <= end)
{
if (a [i] <a [j])
b [t ++] = a [i ++];
kalau tidak
b [t ++] = a [j ++];
}
while (i <= mid)
b [t ++] = a [i ++];
while (j <= end)
b [t ++] = a [j ++];
untuk (i = start; i <= end; i ++) // tulis konten yang diurutkan kembali ke posisi yang sesuai dari array a
a [i] = b [i];
}
void run ()
{
System.out.print ("Masukkan jumlah nomor yang akan diurutkan:");
n = sin.nextInt ();
untuk (int i = 0; i <n; i ++)
A [i] = sin.nextInt ();
sortir (0, n-1);
System.out.println ("Hasil penyortiran adalah:");
// Masukkan data yang akan diurutkan
untuk (int i = 0; i <n; i ++)
System.out.println (A [i]+"");
}
public static void main (string [] args) {
baru mergeSort (). run ();
}
}