ผลต่างระหว่างรุ่นของ "ผู้ใช้:Phizaz/merge sort"

## ถ้ามีข้อมูลมากกว่านั้น ให้แบ่งเป็นสองส่วน แล้วทำ[[การเวียนบังเกิด]]
# ''(ขั้นตอนเอาชนะ)'' เมื่อถึงขั้นตอนนี้จะได้ข้อมูลสองส่วน (โดยที่แต่ละส่วนเรียงในส่วนของตัวเองเรียบร้อยแล้ว) ทำการรวมข้อมูลทั้งสองส่วนนั้นให้เป็นข้อมูลก้อนเดียวที่ทั้งก้อนนั้นเรียงลำดับแล้ว
 
===การอิมพลิเมนต์ แบบบนลงล่าง===
ตัวอย่างการอิมพลิเมนต์ด้วย[[รหัสเทียม]] ทำการเรียงลำดับด้วยการโยนลิสต์ข้อมูลไปที่ฟังก์ชัน MergeSort ผลลัพธ์ที่ออกจากฟังก์ชันนั้นคือข้อมูลที่เรียงลำดับแล้ว
<source lang="c">
MergeSort (array A) {
if (A.size == 0) return A
 
mid = A.size / 2
AA = MergeSort(A[0...mid])
BB = MergeSort(A[mid...A.size])
 
return MeregSort_Merge(AA, BB)
}
 
MergeSort_Merge (array A, array B) {
C = new array
aa = 0
bb = 0
 
while (aa < A.size and bb < B.size) {
if (A[aa] < B[bb]) {
C[] = A[aa++]
} else if (A[aa] > B[bb]) {
C[] = B[bb++]
} else {
aa += 1
bb += 1
}
}
 
while (aa < A.size) C[] = A[aa++]
while (bb < B.size) C[] = B[bb++]
 
return C
}
 
</source>
907

การแก้ไข