دمج الفرز يعني الفرز بالقسمة والقهر:
(1) قسّم صفيف إلى صفيفتين صغيرتين وفرزهما بشكل منفصل ؛
(2) ثم دمج المصفوفات المنفصلة للطلبات التي يتم تصويرها جيدًا ؛
نسخة الكود كما يلي:
استيراد java.util.scanner ؛
الطبقة العامة دمج {
int [] a = null ؛
int [] b = null ؛
int n ؛
الماسح الضوئي SIN = NULL ؛
Mergesort ()
{
a = new int [10000] ؛
ب = جديد [10000] ؛
SIN = ماسح ضوئي جديد (System.in) ؛
}
فرز باطل (int start ، int end) // sort a [start ... end]
{
int منتصف
إذا (start> = end) // عندما يكون هناك عنصر واحد فقط ، ارجع مباشرة
يعود ؛
آخر
{
Mid = (end-start)/2 ؛
فرز (ابدأ ، ابدأ+منتصف) ؛
فرز (ابدأ+منتصف+1 ، نهاية) ؛
// الجمع بين صفيفتين مرتبة A [ابدأ ... ابدأ+منتصف] و [ابدأ+منتصف+1 ... نهاية]
دمج (ابدأ ، ابدأ+منتصف ، نهاية) ؛
}
}
دمج باطل (int start ، int mid ، int end) // مجموعة
{
int t = ابدأ ؛
int i = start ، j = mid+1 ؛
بينما (أنا <= mid && j <= end)
{
إذا (a [i] <a [j])
B [t ++] = a [i ++] ؛
آخر
B [t ++] = a [j ++] ؛
}
بينما (أنا <= منتصف)
B [t ++] = a [i ++] ؛
بينما (j <= end)
B [t ++] = a [j ++] ؛
لـ (i = start ؛ i <= end ؛ i ++) // اكتب المحتوى المرتبة مرة أخرى إلى الموضع المقابل للمصفوفة أ
a [i] = b [i] ؛
}
باطل الجري ()
{
System.out.print ("أدخل عدد الأرقام المراد فرزها:") ؛
n = sin.nextint () ؛
لـ (int i = 0 ؛ i <n ؛ i ++)
a [i] = sin.nextint () ؛
فرز (0 ، N-1) ؛
system.out.println ("نتيجة الفرز هي:") ؛
// أدخل البيانات المراد فرزها
لـ (int i = 0 ؛ i <n ؛ i ++)
system.out.println (a [i]+"") ؛
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
mergesort new (). run () ؛
}
}