Trong bài viết này, chúng ta sẽ tìm hiểu giải pháp cho bài toán sau:
Đề bài – Cho một mảng, cần sắp xếp dùng thuật toán Merge Sort.
Ở đây ta đặt phần tử lớn nhất ở cuối. Lặp lại cho đến khi mảng sắp xếp xong.
Hãy quan sát giải pháp trong triển khai dưới đây:
Ví dụ
# hàm merge
def merge(arr, l, m, r):
n1 = m - l + 1
n2 = r - m
# tạo mảng tạm
L = [0] * (n1)
R = [0] * (n2)
# copy dữ liệu
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 # mảng trái
j = 0 # mảng phải
k = l # merge
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
# copy phần còn lại
while i < n1:
arr[k] = L[i]
i += 1
k += 1
while j < n2:
arr[k] = R[j]
j += 1
k += 1
# sắp xếp
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)
# main
arr = [2, 5, 3, 8, 6, 5, 4, 7]
n = len(arr)
mergeSort(arr, 0, n-1)
print("Mảng đã sắp xếp:")
for i in range(n):
print(arr[i], end=" ")
Kết quả
Mảng đã sắp xếp: 2 3 4 5 5 6 7 8
Kết luận
Trong bài này, chúng ta đã học cách làm chương trình Python Merge Sort.