TopStudy

Đáp án và lời giải

Giải SGK Tin học 11 KNTT Bài 21. Các thuật toán sắp xếp đơn giản có đáp án

Về trang đề

Câu 1

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Em có thể thực hiện như sau:

- Duyệt qua từng phần tử của dãy từ đầu đến cuối.

- So sánh hai phần tử liền kề, nếu phần tử sau lớn hơn phần tử trước thì hoán đổi chúng.

- Tiếp tục duyệt qua các phần tử còn lại cho đến khi không còn phần tử nào cần hoán đổi.

- Lặp lại quá trình trên cho đến khi toàn bộ dãy được sắp xếp.

Hoặc:

-Duyệt qua từng phần tử của dãy từ đầu đến cuối.

-Lưu giá trị của phần tử hiện tại vào biến tạm thời.

-So sánh phần tử hiện tại với các phần tử bên trái, nếu phần tử nào lớn hơn phần tử hiện tại thì dời chúng sang phải một vị trí.

-Chèn giá trị của phần tử hiện tại vào vị trí đúng sau khi dời các phần tử.

-Tăng vị trí phần tử hiện tại lên 1 và lặp lại quá trình trên cho đến khi toàn bộ dãy được sắp xếp.

Câu 2

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Ý tưởng của thuật toán sắp xếp chèn là thực hiện vòng lặp duyệt từ phần tử thứ hai đến cuối dãy. Sau mỗi bước lặp phần tử tương ứng sẽ được chèn vào vị trí đúng của dãy con đã sắp xếp là các phần tử phía trước vị trí đang duyệt.

Câu 3

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Chỉ số của dãy01234
Trước vòng lặp50423
Vòng lặp 1, i=1Duyệt phần tử thứ 2, vì 0 nhỏ hơn 5 nên chèn 0 vào trước 5Duyệt phần tử thứ 2, vì 0 nhỏ hơn 5 nên chèn 0 vào trước 5Duyệt phần tử thứ 2, vì 0 nhỏ hơn 5 nên chèn 0 vào trước 5Duyệt phần tử thứ 2, vì 0 nhỏ hơn 5 nên chèn 0 vào trước 5Duyệt phần tử thứ 2, vì 0 nhỏ hơn 5 nên chèn 0 vào trước 5
Sau vòng lặp05423
Vòng lặp 2, i=2Duyệt phần tử thứ 3, vì 4 lớn hơn 0 và nhỏ hơn 5 nên 4 được chèn vào trước 5Duyệt phần tử thứ 3, vì 4 lớn hơn 0 và nhỏ hơn 5 nên 4 được chèn vào trước 5Duyệt phần tử thứ 3, vì 4 lớn hơn 0 và nhỏ hơn 5 nên 4 được chèn vào trước 5Duyệt phần tử thứ 3, vì 4 lớn hơn 0 và nhỏ hơn 5 nên 4 được chèn vào trước 5Duyệt phần tử thứ 3, vì 4 lớn hơn 0 và nhỏ hơn 5 nên 4 được chèn vào trước 5
Sau vòng lặp04523
Vòng lặp 3, i=3Duyệt phần tử thứ 4, vì 2 lớn hơn 0 và nhỏ hơn 4 nên 2 được chèn vào trước 4Duyệt phần tử thứ 4, vì 2 lớn hơn 0 và nhỏ hơn 4 nên 2 được chèn vào trước 4Duyệt phần tử thứ 4, vì 2 lớn hơn 0 và nhỏ hơn 4 nên 2 được chèn vào trước 4Duyệt phần tử thứ 4, vì 2 lớn hơn 0 và nhỏ hơn 4 nên 2 được chèn vào trước 4Duyệt phần tử thứ 4, vì 2 lớn hơn 0 và nhỏ hơn 4 nên 2 được chèn vào trước 4
Sau vòng lặp02453
Vòng lặp 4, i=4Duyệt phần tử thứ 5, vì 3 lớn hơn 2 và nhỏ hơn 4 nên 3 được chèn vào trước 4Duyệt phần tử thứ 5, vì 3 lớn hơn 2 và nhỏ hơn 4 nên 3 được chèn vào trước 4Duyệt phần tử thứ 5, vì 3 lớn hơn 2 và nhỏ hơn 4 nên 3 được chèn vào trước 4Duyệt phần tử thứ 5, vì 3 lớn hơn 2 và nhỏ hơn 4 nên 3 được chèn vào trước 4Duyệt phần tử thứ 5, vì 3 lớn hơn 2 và nhỏ hơn 4 nên 3 được chèn vào trước 4
Kết thúc02345

Câu 4

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Nếu dãy ban đầu đã được sắp xếp, thì thuật toán sắp xếp chèn sẽ không thực hiện thay đổi nào trên dãy vì mỗi phần tử trong dãy đã đứng đúng vị trí của nó. Cụ thể, các bước của thuật toán sẽ được thực hiện như sau:

Xác định phần tử đầu tiên trong dãy là phần tử thứ 2 (i = 1), không cần thực hiện bất kỳ thay đổi nào vì phần tử này đã đứng đúng vị trí của nó trong dãy đã được sắp xếp.

Kiểm tra phần tử thứ 3 (i = 2) so với các phần tử trước nó trong dãy. Nếu phần tử này đã đứng đúng vị trí, không cần thực hiện thay đổi nào.

Tiếp tục kiểm tra và so sánh từng phần tử còn lại trong dãy với các phần tử trước nó. Nếu phần tử đang xét đã đứng đúng vị trí, không cần thực hiện thay đổi nào.

Sau khi kiểm tra hết các phần tử trong dãy, thuật toán kết thúc mà không có bất kỳ thay đổi nào được thực hiện trên dãy ban đầu, vì dãy đã được sắp xếp.

Câu 5

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Thuật toán sắp xếp chọn thực hiện một vòng lặp với chỉ số i chạy từ 0 (phần tử đầu tiên) đến n-2 (phần tử gần cuối). Tại mỗi bước lặp, chọn phần tử nhỏ nhất nằm trong dãy A[i], A[i+1],…,A[n-1] và đổi chỗ phần tử này với A[i].

Câu 6

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Chỉ số của dãy01234
Trước vòng lặp45213
Vòng lặp 1, i=01 là phần tử nhỏ nhất, đổi chỗ 1 và 41 là phần tử nhỏ nhất, đổi chỗ 1 và 41 là phần tử nhỏ nhất, đổi chỗ 1 và 41 là phần tử nhỏ nhất, đổi chỗ 1 và 41 là phần tử nhỏ nhất, đổi chỗ 1 và 4
Sau vòng lặp15243
Vòng lặp 2, i=12 là phần tử nhỏ nhất không tính phần tử đầu tiên, đổi chỗ 2 và 52 là phần tử nhỏ nhất không tính phần tử đầu tiên, đổi chỗ 2 và 52 là phần tử nhỏ nhất không tính phần tử đầu tiên, đổi chỗ 2 và 52 là phần tử nhỏ nhất không tính phần tử đầu tiên, đổi chỗ 2 và 52 là phần tử nhỏ nhất không tính phần tử đầu tiên, đổi chỗ 2 và 5
Sau vòng lặp12543
Vòng lặp 3, i=23 là phần tử nhỏ nhất không tính hai phần tử đầu tiên, đổi chỗ 3 và 53 là phần tử nhỏ nhất không tính hai phần tử đầu tiên, đổi chỗ 3 và 53 là phần tử nhỏ nhất không tính hai phần tử đầu tiên, đổi chỗ 3 và 53 là phần tử nhỏ nhất không tính hai phần tử đầu tiên, đổi chỗ 3 và 53 là phần tử nhỏ nhất không tính hai phần tử đầu tiên, đổi chỗ 3 và 5
Sau vòng lặp12345
Vòng lặp 4, i=34 là phần tử nhỏ nhất không tính ba phần tử đầu tiên, giữ nguyên vị trí dãy số4 là phần tử nhỏ nhất không tính ba phần tử đầu tiên, giữ nguyên vị trí dãy số4 là phần tử nhỏ nhất không tính ba phần tử đầu tiên, giữ nguyên vị trí dãy số4 là phần tử nhỏ nhất không tính ba phần tử đầu tiên, giữ nguyên vị trí dãy số4 là phần tử nhỏ nhất không tính ba phần tử đầu tiên, giữ nguyên vị trí dãy số
Kết thúc12345

Câu 7

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Đúng. Theo thuật toán sắp xếp chọn (Selection Sort), sau mỗi bước thứ i, phần tử nhỏ nhất (hoặc lớn nhất, tùy thuật toán sắp xếp chọn làm việc với phần tử nhỏ nhất hoặc lớn nhất) trong đoạn từ A[0] đến A[i] sẽ được đưa về vị trí đúng của nó trong mảng. Nghĩa là sau mỗi bước thứ i, các phần tử A[0], A[1], ..., A[i] đã được sắp xếp đúng thứ tự so với nhau. Các phần tử A[i+1], A[i+2], ..., A[n-1] (n là số phần tử trong mảng) vẫn chưa được sắp xếp đúng thứ tự. Quá trình này tiếp tục cho đến khi tất cả các phần tử trong mảng được sắp xếp đúng thứ tự.

Câu 8

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Thuật toán sắp xếp nổi bọt thực hiện nhiều vòng lặp, kiểm tra hai phần tử cạnh nhau, nếu chúng chưa sắp xếp đúng thì đổi chỗ.

Câu 9

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Vòng lặp 1Vòng lặp 1Vòng lặp 1Vòng lặp 1Vòng lặp 1Vòng lặp 1
Chỉ số của dãy0123
Trước vòng lặp4321
Bước lặp 1, j=04321So sánh phần tử thứ nhất và phần tử thứ 2
Bước lặp ,2 j=13421So sánh phần tử thứ 2 và phần tử thứ 3
Bước lặp 3, j=23241So sánh phần tử thứ 3 và phần tử thứ 4
Kết thúc vòng 13214
Vòng lặp 2Vòng lặp 2Vòng lặp 2Vòng lặp 2Vòng lặp 2Vòng lặp 2
Chỉ số của dãy0123
Trước vòng lặp3214
Bước lặp 1, j=03214So sánh phần tử thứ nhất và phần tử thứ 2
Bước lặp ,2 j=12314So sánh phần tử thứ 2 và phần tử thứ 3
Bước lặp 3, j=22134So sánh phần tử thứ 3 và phần tử thứ 4
Kết thúc vòng 22134
Vòng lặp 3Vòng lặp 3Vòng lặp 3Vòng lặp 3Vòng lặp 3Vòng lặp 3
Chỉ số của dãy0123
Trước vòng lặp2134
Bước lặp 1, j=01234So sánh phần tử thứ nhất và phần tử thứ 2
Bước lặp ,2 j=11234So sánh phần tử thứ 2 và phần tử thứ 3
Bước lặp 3, j=21234So sánh phần tử thứ 3 và phần tử thứ 4
Kết thúc vòng 31234
Kết thúc lặp1234

Câu 10

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Thuật toán sắp xếp nổi bọt hoạt động bằng cách so sánh các phần tử kế tiếp trong danh sách và hoán đổi chúng nếu chúng không được sắp xếp theo thứ tự. Quá trình lặp sẽ tiếp tục cho đến khi tất cả các phần tử đều được sắp xếp. Vì vậy khi màu của tất cả các mũi tên đều đỏ trong sơ đồ mô phỏng thì có nghĩa là không còn phần tử nào được sắp xếp theo thứ tự tăng dần hoặc giảm dần và không cần thực hiện bất kỳ hoán đổi nào nữa.

Câu 11

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

1.Thuật toán sắp xếp chèn (Insertion Sort):

def insertion_sort(arr):

for i in range(1, len(arr)):

key = arr[i]

j = i - 1

while j >= 0 and arr[j] > key:

arr[j + 1] = arr[j]

j -= 1

arr[j + 1] = key

return arr

A = [5, 8, 1, 0, 10, 4, 3]

sorted_A = insertion_sort(A)

print("Dãy A sau khi sắp xếp chèn:", sorted_A)

2. Thuật toán sắp xếp chọn (Selection Sort):

def selection_sort(arr):

for i in range(len(arr)):

min_idx = i

for j in range(i + 1, len(arr)):

if arr[j] < arr[min_idx]:

min_idx = j

arr[i], arr[min_idx] = arr[min_idx], arr[i]

return arr

A = [5, 8, 1, 0, 10, 4, 3]

sorted_A = selection_sort(A)

print("Dãy A sau khi sắp xếp chọn:", sorted_A)

3.Thuật toán sắp xếp nổi bọt (Bubble Sort):

def bubble_sort(arr):

n = len(arr)

for i in range(n - 1):

for j in range(n - 1 - i):

if arr[j] > arr[j + 1]:

arr[j], arr[j + 1] = arr[j + 1], arr[j]

return arr

A = [5, 8, 1, 0, 10, 4, 3]

sorted_A = bubble_sort(A)

print("Dãy A sau khi sắp xếp nổi bọt:", sorted_A)

Câu 12

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Sử dụng thuật toán săp xếp nổi bọt:

def bubble_sort(arr):

n = len(arr)

for i in range(n - 1):

for j in range(0, n - i - 1):

if arr[j] > arr[j + 1]:

arr[j], arr[j + 1] = arr[j + 1], arr[j]

# Nhập dãy số từ bàn phím

input_str = input("Nhập dãy số cách nhau bởi dấu cách: ")

arr = list(map(int, input_str.split()))

# In dãy số trước khi sắp xếp

print("Dãy số trước khi sắp xếp: ", arr)

# Sắp xếp dãy số

bubble_sort(arr)

# In dãy số sau khi sắp xếp

print("Dãy số sau khi sắp xếp: ", arr)

Câu 13

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

1.Thuật toán sắp xếp chèn:

def insertion_sort(arr):

n = len(arr)

for i in range(1, n):

key = arr[i]

j = i - 1

while j >= 0 and arr[j] < key:

arr[j + 1] = arr[j]

j -= 1

arr[j + 1] = key

return arr

2. Thuật toán sắp xếp chọn :

def selection_sort(arr):

n = len(arr)

for i in range(n - 1):

max_idx = i

for j in range(i + 1, n):

if arr[j] > arr[max_idx]:

max_idx = j

arr[i], arr[max_idx] = arr[max_idx], arr[i]

return arr

3.Thuật toán sắp xếp nổi bọt:

def bubble_sort(arr):

n = len(arr)

for i in range(n - 1):

for j in range(n - i - 1):

if arr[j] < arr[j + 1]:

arr[j], arr[j + 1] = arr[j + 1], arr[j]

return arr

Câu 14

Hướng dẫn chấm do TopStudy biên soạn, mang tính gợi ý

Các thuật toán sắp xếp như sắp xếp chèn, sắp xếp chọn và sắp xếp nổi bọt có ý nghĩa thực tế quan trọng trong nhiều tình huống khác nhau, bao gồm việc sắp xếp học sinh trong lớp theo chiều cao tăng dần. Dưới đây là một số ý nghĩa thực tế của các thuật toán sắp xếp:

-Tối ưu hóa thời gian thực thi: Các thuật toán sắp xếp giúp tối ưu hóa thời gian thực thi của các quy trình liên quan đến sắp xếp, giúp giảm bớt thời gian chờ đợi và tăng hiệu quả hoạt động của hệ thống. Ví dụ, khi sắp xếp các học sinh trong lớp theo chiều cao tăng dần, sử dụng thuật toán sắp xếp hiệu quả giúp đảm bảo quá trình sắp xếp nhanh chóng và đáp ứng được thời gian chờ đợi của học sinh và giáo viên.

-Tạo độ thứ tự: Các thuật toán sắp xếp giúp tạo ra độ thứ tự trong các tập dữ liệu, từ đó giúp dễ dàng tìm kiếm, tra cứu, phân tích hoặc xử lý dữ liệu sau này. Ví dụ, trong việc sắp xếp các học sinh trong lớp theo chiều cao tăng dần, độ thứ tự giúp giáo viên dễ dàng định vị vị trí của từng học sinh trong lớp học.

-Áp dụng trong nhiều lĩnh vực: Các thuật toán sắp xếp không chỉ được áp dụng trong lĩnh vực giáo dục, mà còn được sử dụng trong nhiều lĩnh vực khác như khoa học máy tính, công nghệ thông tin, tài chính, thương mại điện tử, kho dữ liệu, v.v. Ví dụ, trong công nghệ thông tin, sắp xếp dữ liệu giúp cải thiện hiệu suất của các thuật toán khác, chẳng hạn trong tìm kiếm dữ liệu, xử lý hình ảnh, xử lý âm thanh, v.v.

-Nền tảng cho các thuật toán phức tạp hơn: Các thuật toán sắp xếp đóng vai trò là nền tảng cho nhiều thuật toán phức tạp.