Đáp án đúng: Câu hỏi yêu cầu trình bày chi tiết các bước sắp xếp mảng số nguyên tăng dần bằng thuật toán Shell Sort. Mảng cho trước là: [17, 72, 99, 32, 58, 70, 44, 12, 23, 32].
Shell Sort là một cải tiến của Insertion Sort. Nó hoạt động bằng cách sắp xếp các cặp phần tử cách nhau một khoảng (gọi là gap) nhất định, sau đó giảm dần khoảng cách này cho đến khi khoảng cách bằng 1. Khi khoảng cách bằng 1, thuật toán trở thành Insertion Sort thông thường, nhưng lúc này mảng đã gần như được sắp xếp, do đó việc hoàn thành sắp xếp sẽ rất nhanh.
Các bước thực hiện với mảng [17, 72, 99, 32, 58, 70, 44, 12, 23, 32]:
1. Chọn các khoảng (gaps): Một chuỗi các khoảng phổ biến là n/2, n/4, n/8, ..., 1. Với n=10, ta có thể dùng chuỗi khoảng: 5, 2, 1.
2. Sắp xếp với gap = 5:
* So sánh và hoán vị các cặp (index i, index i+5).
* Cặp 1: (0, 5) -> (17, 70). 17 < 70, không đổi.
* Cặp 2: (1, 6) -> (72, 44). 72 > 44, hoán vị. Mảng: [17, 44, 99, 32, 58, 70, 72, 12, 23, 32]
* Cặp 3: (2, 7) -> (99, 12). 99 > 12, hoán vị. Mảng: [17, 44, 12, 32, 58, 70, 72, 99, 23, 32]
* Cặp 4: (3, 8) -> (32, 23). 32 > 23, hoán vị. Mảng: [17, 44, 12, 23, 58, 70, 72, 99, 32, 32]
* Cặp 5: (4, 9) -> (58, 32). 58 > 32, hoán vị. Mảng: [17, 44, 12, 23, 32, 70, 72, 99, 32, 58]
* Sau bước gap = 5: [17, 44, 12, 23, 32, 70, 72, 99, 32, 58]
3. Sắp xếp với gap = 2:
* Thực hiện sắp xếp Insertion Sort cho các mảng con cách nhau 2 phần tử.
* Mảng con 1 (chỉ số lẻ): [44, 23, 70, 99, 58]
* [44, 23] -> [23, 44]
* [44, 70] -> [44, 70]
* [70, 99] -> [70, 99]
* [99, 58] -> [58, 99]
* Mảng con 1 sau sắp xếp: [23, 44, 70, 58, 99]
* Mảng con 2 (chỉ số chẵn): [17, 12, 32, 72, 32]
* [17, 12] -> [12, 17]
* [17, 32] -> [17, 32]
* [32, 72] -> [32, 72]
* [72, 32] -> [32, 72]
* Mảng con 2 sau sắp xếp: [12, 17, 32, 32, 72]
* Ghép lại mảng: [12, 23, 17, 44, 32, 70, 32, 99, 72, 58]
* Sau bước gap = 2: [12, 23, 17, 44, 32, 70, 32, 99, 72, 58]
4. Sắp xếp với gap = 1:
* Đây là Insertion Sort trên mảng gần như đã sắp xếp: [12, 23, 17, 44, 32, 70, 32, 99, 72, 58]
* [12]
* [12, 23]
* [17, 23, 12] -> [12, 17, 23]
* [12, 17, 23, 44]
* [32, 44, 23, 17, 12] -> [12, 17, 23, 32, 44]
* [12, 17, 23, 32, 44, 70]
* [32, 70, 44, 32, 23, 17, 12] -> [12, 17, 23, 32, 32, 44, 70]
* [12, 17, 23, 32, 32, 44, 70, 99]
* [72, 99, 70, 44, 32, 32, 23, 17, 12] -> [12, 17, 23, 32, 32, 44, 70, 72, 99]
* [58, 72, 99, 70, 44, 32, 32, 23, 17, 12] -> [12, 17, 23, 32, 32, 44, 58, 70, 72, 99]
* Sau bước gap = 1: [12, 17, 23, 32, 32, 44, 58, 70, 72, 99]
Vì câu hỏi chỉ yêu cầu trình bày các bước thực hiện và không có đáp án trắc nghiệm đi kèm để đánh giá tính đúng sai, nên trường `answer_iscorrect` được đặt là "null" để thể hiện sự không áp dụng hoặc không có câu trả lời đúng sai cụ thể.