إذا كان لديك مصفوفتان مفروزتان A وB، حيث تحتوي نهاية A على مساحة كافية لـ B، فاكتب طريقة لدمج B في A وفرزهما.
بعد الحصول على هذا السؤال، الفكرة الأكثر مباشرة هي مقارنة العناصر في A وB وإدراجها في المصفوفات بالترتيب حتى يتم اجتياز جميع العناصر في A وB. ولكن هناك عيبًا في القيام بذلك: إذا كان موضع إدراج العنصر في مقدمة المصفوفة A، فيجب نقل المصفوفة الأصلية إلى الخلف. وهذا يضيف النفقات العامة. لكن يمكننا استخدام طريقة أخرى لإدراج العناصر في نهاية المصفوفة A. بهذه الطريقة لن يكون لدينا عناصر تتحرك! الرمز هو كما يلي:
انسخ رمز الكود كما يلي: /*
* lastA: العدد الفعلي للعناصر في lastB: العدد الفعلي للعناصر في b mergeIndex هو حجم المساحة الفعلي للمصفوفة الجديدة
*/
public static void mergeOrder(int[] a, int[] b, int lastA, int lastB) {
int IndexA = lastA - 1;
int IndexB = lastB - 1;
int mergeIndex = lastA + lastB - 1;
بينما (indexA >= 0 && IndexB >= 0) {
إذا (أ[indexA] > ب[indexB]) {
a[mergeIndex] = a[indexA];
mergeIndex --;
الفهرس أ --;
} آخر {
a[mergeIndex] = b[indexB];
mergeIndex --;
الفهرس ب --;
}
}
بينما (الفهرسB >= 0) {
a[mergeIndex] = b[indexB];
mergeIndex --;
الفهرس ب --;
}
}