Làm thế nào để cho máy tính biết một dãy đã có thứ tự tăng dần?
Làm thế nào để cho máy tính biết một dãy đã có thứ tự tăng dần?
Giả sử có một dãy hộp kẹo, mỗi hộp chứa một số kẹo nào đó. Có một chú robot chỉ biết làm hai thao tác:
- So sánh số kẹo trong hai hộp cạnh nhau.
- Hoán đổi vị trí hai hộp kẹo cạnh nhau.
Theo em, chú robot phải làm thế nào để xếp lại các hộp sao cho số kẹo trong các hộp tăng dần?
Thảo luận (1)Hướng dẫn giảiTheo em, chú robot phải so sánh lần lượt các hộp kẹo cạnh nhau ở trong dãy, nếu hộp kẹo thứ nhất lớn hơn hộp kẹo thứ hai thì tiến hành hoán đổi vị trí hai hộp kẹo cạnh nhau. Robot cứ thức hiện lần lượt cho đến khi không đổi chỗ các hộp kẹo cạnh nhau nữa thì kết thúc công việc
(Trả lời bởi Tuyet)
1) Trong thuật toán sắp xếp nổi bọt thì dấu hiệu để biết dãy chưa sắp xếp xong là gì?
2) Theo em, có phải Hình 2 đã mô tả chi tiết một lượt robot thực hiện so sánh các cặp phần tử liền kề và đổi chỗ khi chúng trái thứ tự mong muốn không?
Thảo luận (1)Hướng dẫn giải1)
=> Dấu hiệu : Nếu dãy chưa được sắp xếp đúng thứ tự thì trong dãy sẽ còn cặp phần tử liền kề không đúng thứ tự tăng dần hoặc giảm dần.
2) Hình mô tả khá chi tiết về cách thực hiện của robot.
Nhưng em có thể bổ sung thêm:
Nếu vị trí ai = ai+1 => giữ nguyên vị trí (Và lặp lại cho đến nhánh)
(Trả lời bởi Tuyet)
Hãy mô phỏng thuật toán sắp xếp nổi bọt cho một dãy số nguyên tùy chọn, không ít hơn 5 phần tử. Sau bao nhiêu lượt đi từ đầu đến cuối dãy để so sánh và đổi chỗ thì thuật toán kết thúc? Tổng số có bao nhiêu lần đổi chỗ hai phần tử liền kề?
Thảo luận (2)Hướng dẫn giảitham khảo
Ta có dãy số: 5, 2, 4, 1, 3. Sắp xếp giảm dần.
Bước 1. So sánh số 5 và 2. Ta thấy số 5 lớn hơn 2. Nên ta giữ nguyên kết quả. Dãy số sau khi đổi: 5, 2, 4, 1, 3.
Bước 2. So sánh số 2 và 4. Ta thấy số 4 lớn hơn 2 và ta tiến hành đổi chỗ số 4 và 2. Dãy số sau khi đổi: 5, 4, 2, 1, 3.
Bước 3. So sánh số 2 và 1. Ta thấy số 2 lớn hơn 1, ta giữ nguyên dãy số: 5, 4, 2, 1, 3.
Bước 4. So sánh số 1 và 3, ta thấy số 3 lớn hơn số 1, ta tiến hành đổi chỗ số 3 và số 1. Dãy số sau khi đổi: 5, 4, 2, 3, 1.
Bước 5. Tiến hành duyệt dãy số một lần nữa để chắc chắn dãy số đã được sắp xếp giảm dần. So sánh số 5 và 4, số 5 lớn hơn 4 giữ nguyên, dãy thu được: 5, 4, 2, 3, 1.
Bước 6. So sánh số 4 và 2, số 4 lớn hơn 2 giữ nguyên.
Bước 7. So sánh số 2 và 3, số 3 lớn hơn số 2, ta tiến hành đổi vị trí số 2 và 3. Dãy số thu được: 5, 4, 3, 2, 1.
Bước 8. So sánh số 2 và 1, số 2 lớn hơn số 1, nên ta giữ nguyên.
Ta sẽ đi tám lượt đi thì thuật toán mới kết thúc.
Tổng số lần đổi vị trí phần tử là 3 lần.
(Trả lời bởi Mai Trung Hải Phong)
Theo em, vì sao thuật toán sắp xếp trên lại có tên là sắp xếp nổi bọt?
Thảo luận (1)Hướng dẫn giảiVì là chúng ta sẽ so sánh các phần tử ngay cạnh nhau, đồng thời sẽ thực hiện so sánh ngay sau khi đổi chỗ phần tử
(Trả lời bởi Nguyễn Lê Phước Thịnh)
Trong thuật toán sắp xếp nổi bọt, khi nào hai phần từ liền kề được đổi chổ?
Thảo luận (1)Hướng dẫn giảiNếu a[i]>a[i+1] thì đổi chỗ a[i] và a[i+1] để sắp xếp tăng dần
Nếu a[i]<a[i+1] thì đổi chỗ a[i] và a[i+1] để sắp xếp giảm dần
(Trả lời bởi Nguyễn Lê Phước Thịnh)
Thuật toán sắp xếp nổi bọt kết thúc khi nào?
Thảo luận (1)Hướng dẫn giải=> Kết thúc: khi các phần tử đã nằm đúng thứ tự mong muốn trong dãy, không còn bất kì cặp liền kề nào trái thứ tự mong muốn, tức là không còn xảy ra đổi chỗ lần nào nữa.
(Trả lời bởi Tuyet)
Khi nào thực hiện thuật toán sắp xếp nổi bọt chỉ cần một lượt so sánh các cặp phần tử liền kề và đổi chổ?
Thảo luận (1)Hướng dẫn giảiKhi các phần tử sắp xếp không theo thứ tự ta nên dùng sắp xếp nổi bọt để sắp xếp phần tử theo thứ tự tăng dần hoặc giảm dần
(Trả lời bởi Tuyet)