เมื่อพิจารณาอาร์เรย์ A และ B ที่เรียงลำดับแล้วสองตัว โดยที่ส่วนท้ายของ A มีพื้นที่เพียงพอสำหรับ B ให้เขียนวิธีเพื่อรวม B เข้ากับ A แล้วเรียงลำดับ
หลังจากได้รับคำถามนี้ แนวคิดที่ตรงไปตรงมาที่สุดคือการเปรียบเทียบองค์ประกอบใน A และ B แล้วแทรกลงในอาร์เรย์ตามลำดับจนกว่าองค์ประกอบทั้งหมดใน A และ B จะเคลื่อนที่ไป แต่มีข้อเสียในการทำเช่นนี้: ถ้าตำแหน่งการแทรกขององค์ประกอบอยู่ที่ด้านหน้าของอาร์เรย์ A อาร์เรย์เดิมจะต้องถูกย้ายไปข้างหลัง นี่เป็นการเพิ่มค่าใช้จ่าย แต่เราสามารถใช้วิธีอื่นในการแทรกองค์ประกอบที่ส่วนท้ายของอาร์เรย์ A ด้วยวิธีนี้เราจะไม่ให้องค์ประกอบเคลื่อนไหว! รหัสมีดังนี้:
คัดลอกโค้ดโค้ดดังนี้: /*
* LastA: จำนวนองค์ประกอบจริงใน LastB: จำนวนองค์ประกอบจริงใน B MergeIndex คือขนาดพื้นที่จริงของอาร์เรย์ใหม่
-
โมฆะสาธารณะคงที่ mergeOrder (int [] a, int [] b, int LastA, int LastB) {
int ดัชนี A = สุดท้าย A - 1;
int ดัชนี B = สุดท้าย B - 1;
int mergeIndex = สุดท้าย A + LastB - 1;
ในขณะที่ (ดัชนีA >= 0 && ดัชนีB >= 0) {
ถ้า (a[indexA] > b[indexB]) {
a[mergeIndex] = a[indexA];
ผสานดัชนี --;
ดัชนีA --;
} อื่น {
ก[mergeIndex] = ข[ดัชนีB];
ผสานดัชนี --;
ดัชนีB --;
-
-
ในขณะที่ (ดัชนีB >= 0) {
ก[mergeIndex] = ข[ดัชนีB];
ผสานดัชนี --;
ดัชนีB --;
-
-