Bài tập  /  Bài đang cần trả lời

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], [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 đã ...

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], [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 > 0 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ụ printine, 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.

1 trả lời
Hỏi chi tiết
11
0
0
Đặng Bảo Trâm
11/09 10:20:39

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)

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm
Bài tập liên quan
Bài tập Tin học Lớp 10 mới nhất
Trắc nghiệm Tin học Lớp 10 mới nhất

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường

Học ngoại ngữ với Flashcard

×
Trợ lý ảo Trợ lý ảo
×
Đấu trường tri thức | Lazi Quiz Challenge +500k