ในบทความนี้ เราจะเรียนรู้วิธีการแก้ปัญหาต่อไปนี้:
ข้อความปัญหา — กำหนดอาร์เรย์ ให้จัดเรียงโดยใช้แนวคิดของ Merge Sort
ที่นี่เราจะวางองค์ประกอบสูงสุดไว้ที่ท้าย สิ่งนี้จะทำซ้ำจนกว่าอาร์เรย์จะถูกจัดเรียง
มาเปลี่ยนดูโค้ดตัวอย่างด้านล่างนี้:
ตัวอย่างโค้ด
# ฟังก์ชัน merge
def merge(arr, l, m, r):
n1 = m - l + 1
n2 = r - m
# สร้างอาร์เรย์ชั่วคราว
L = [0] * (n1)
R = [0] * (n2)
# คัดลอกข้อมูลไปยังอาร์เรย์
for i in range(0, n1):
L[i] = arr[l + i]
for j in range(0, n2):
R[j] = arr[m + 1 + j]
i = 0 # ครึ่งแรกของอาร์เรย์
j = 0 # ครึ่งหลังของอาร์เรย์
k = l # รวมสองครึ่ง
while i < n1 and j < n2:
if L[i] <= R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
# คัดลอกองค์ประกอบที่เหลือของครึ่งซ้าย
while i < n1:
arr[k] = L[i]
i += 1
k += 1
# คัดลอกองค์ประกอบที่เหลือของครึ่งขวา
while j < n2:
arr[k] = R[j]
j += 1
k += 1
# ฟังก์ชันจัดเรียง
def mergeSort(arr, l, r):
if l < r:
# หาค่ากลาง
m = (l + (r-1)) // 2
# จัดเรียง
mergeSort(arr, l, m)
mergeSort(arr, m+1, r)
merge(arr, l, m, r)
# โปรแกรมหลัก
arr = [2, 5, 3, 8, 6, 5, 4, 7]
n = len(arr)
mergeSort(arr, 0, n-1)
print("Sorted array is")
for i in range(n):
print(arr[i], end=" ")
ผลลัพธ์
Sorted array is 2 3 4 5 5 6 7 8

ตัวแปรทั้งหมดถูกประกาศในขอบเขตท้องถิ่น (local scope) และการอ้างอิงของมันแสดงในรูปภาพด้านบน
สรุป
ในบทความนี้ เราได้เรียนรู้วิธีการเขียนโปรแกรม Python สำหรับ Merge Sort