31.2. 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ự...
31.2. 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ả sử chúng ta sẽ áp dụng thuật toán sắp xếp chèn để cài đặt cho chương trình này. Ý tưởng của thuật toán này như sau: Sẽ duyệt từng phần tử của dãy A, tính từ vị trí thứ 2 trở đi. Với mỗi phần tử (giả sử A[k]), sẽ tìm cách chèn phần tử này vào đúng vị trị của dãy con phía trước A[0], A[1]....., A[k-1] sao cho dãy con này được sắp xếp đúng. Sau khi duyệt xong các phần tử của dãy thì dãy gốc đã được sắp xếp xong.
Với mỗi phần tử A[k], việc chèn vào vị trí đúng trong dãy con phía trước được thực hiện bằng một vòng lặp như sau:
j = k - 1
while j > 6 and A[j] > A[j+1]:
A[j],A[j + 1] = A[j+1],A[j]
j = j - 1
Đề tìm lỗi chương trình trên chúng ta áp dụng công cụ printline, in các giá trị trung gian. Với mỗi vòng lặp chính (vòng lặp for k in range(1,n)), chúng ta sẽ in ra các giá trị sau: k, A[k] và kết quả dãy A.
Chương trình được viết như sau, sau khi bổ sung các lệnh in phần tử trung gian.
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):
print("vòng",k, "số đang xét:", A[k], end = " ")
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
print(A)
print("Dãy gốc:",dayA)
A = dayA.copy()
sap_ xep (A)
print("Dãy đích:",A)
Em hãy viết lại chương trình trên và tiến hành kiểm thử xem chương trình có lỗi không? Nếu có thì tìm ra lỗi và sửa lại cho chương trình chạy đúng.
Sau đó chạy chương trình và kiểm tra kết quả in ra để xem liệu dãy đã được sắp xếp đúng hay chưa. Nếu có lỗi, bạn cần kiểm tra và sửa lại chương trình theo những phần cần thiết.
Sau khi chạy chương trình, bạn sẽ nhìn thấy dãy số gốc và dãy số đã được sắp xếp đúng, từ đó có thể xác định xem chương trình có hoạt động đúng hay không.
Nếu chương trình chưa chạy đúng, bạn cần điều chỉnh và sửa lại phần code cần thiết để giải quyết vấn đề và chạy chương trình lại cho đến khi đạt được kết quả mong muốn.
- 31.1. Viết chương trình yêu cầu nhập số thực dương a. Chương trình cần kiểm soát lỗi nhập dữ liệu...
- 31.3. Viết chương trình in bảng cửu chương ra màn hình. Yêu cầu bảng cửu chương in ra thành 10 khối...
- 31.4. Cho trước dãy số bất kì A. Em hãy viết chương trình tìm và chỉ ra vị trí đầu tiên của dãy A...
- 31.5. Em hãy viết chương trình nhập một xâu kí tự bất kì từ bàn phím. Cần sắp xếp lại các chữ số...
- 31.6. Em hãy viết chương trình nhập số tự nhiên n, sau đó nhập n họ tên đầy đủ học sinh trong lớp....
- 31.7. Em hãy viết chương trình nhập hai số tự nhiên Y1, Y2 là số năm, Y2 > Y1. Tính xem trong...
- 31.8. Gọi ƯCLN(a, b) là hàm ƯCLN của hai số tự nhiên a, b. Dễ thấy ta có ƯCLN(a, b) = ƯCLN(b, a%b)...
- 31.9. Em hãy viết chương trình nhập số tự nhiên n > 1, sau đó in ra tất cả các ước số nguyên tố...
- 31.10. Bài toán tìm tổng con lớn nhất.Giả sử một công ty du lịch đã thiết kế một chương trình du...