Bài toán sắp xếp: Cho trước một dãy số A, viết chương trình sắp xếp dãy số này theo thứ tự tăng dần.
Giải thích
Các em tự viết lại chương trình trên:
Kết quả chạy chương trình có thể như sau:
Nhận xét: tại mỗi vòng lặp, các giá trị A[k] cũng đã được di chuyển để được chèn vào một vị trí trong dãy con A[0], A[1], ..., A[k-1], tuy nhiên vị trí A[0] không bị thay đổi. Từ đó chúng ta tìm ra lỗi của chương trình tại vị trí lệnh while:
while j > 0 and A[j] > A[j+1]:
Cần sửa lại như sau:
while j >= 0 and A[j] > A[j+1]:
Chương trình đã tìm ra lỗi nhờ công cụ kiểm thử printine. Chương trình chính thức sau khi sửa như sau.
sap_xep.py
dayA = [5,1,8,4,2] # Dãy gốc cần sắp xếp
def sap_xep(A):
n = len(A)
for k in range (1,n):
j = k – 1
while j >= 0 and A[j] > A[j+1]:
A[j], A[j+1] = A[j+1], A[j]
j = j – 1
A = dayA. copy()
sap_xep (A)
print("Dãy đích:", A)