Đáp án Tin 11 Khoa học máy tính Kết nối bài 21 Các thuật toán sắp xếp đơn giản

Đáp án bài 21 Các thuật toán sắp xếp đơn giản. Bài giải được trình bày ngắn gọn, chính xác giúp các em học Tin 11 Khoa học máy tính Kết nối tri thức dễ dàng. Từ đó, hiểu bài và vận dụng vào các bài tập khác. Đáp án chuẩn chỉnh, rõ ý, dễ tiếp thu. Kéo xuống dưới để xem chi tiết

BÀI 21 - CÁC THUẬT TOÁN SẮP XẾP ĐƠN GIẢN

MỞ ĐẦU

CH 1: Bài học trước cho em thấy việc tìm kiếm trên một dãy đã sắp xếp nhanh hơn với việc tìm kiếm tuần tự. Vì vậy bài toán tìm kiếm liên quan mật thiết đến bài toán sắp xếp. Bài toán sắp xếp cơ bản có dạng như sau:

Cho dãy A gồm n phần tử:

A[0],A[1],….,A[n-1] (1)

Cần sắp xếp dãy A theo thứ tự tăng dần:

A[0] ≤ A[1] ≤  ...  ≤ A[n-1] (2)

Em hãy trình bày ý tưởng của mình để giải bài toán sắp xếp với dãy có 4 phần tử.

Đáp án chuẩn:

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.

1. THUẬT TOÁN SẮP XẾP CHÈN

HĐ 1. Tìm hiểu ý tưởng thuật toán sắp xếp chèn

CH 1: Quan sát sơ đồ mô phỏng, trao đổi, thảo luận về ý tưởng chính của thuật toán sắp xếp chèn.

MỞ ĐẦUCH 1: Bài học trước cho em thấy việc tìm kiếm trên một dãy đã sắp xếp nhanh hơn với việc tìm kiếm tuần tự. Vì vậy bài toán tìm kiếm liên quan mật thiết đến bài toán sắp xếp. Bài toán sắp xếp cơ bản có dạng như sau:Cho dãy A gồm n phần tử:A[0],A[1],….,A[n-1] (1)Cần sắp xếp dãy A theo thứ tự tăng dần:A[0] ≤ A[1] ≤  ...  ≤ A[n-1] (2)Em hãy trình bày ý tưởng của mình để giải bài toán sắp xếp với dãy có 4 phần tử.Đáp án chuẩn: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.1. THUẬT TOÁN SẮP XẾP CHÈNHĐ 1. Tìm hiểu ý tưởng thuật toán sắp xếp chènCH 1: Quan sát sơ đồ mô phỏng, trao đổi, thảo luận về ý tưởng chính của thuật toán sắp xếp chèn.Đáp án chuẩn:Ý tưởng 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âu hỏiCH 1: Mô phỏng chi tiết các bước lặp sắp xếp chèn dãy A = [5, 0, 4, 2, 3]Đáp án chuẩn:Bước 1: i = 1;//giả sử có đoạn a[0] đã được sắp xếpBước 2: x = a[i];Bước 3: Tìm vị trí pos thích hợp trong đoạn a[0] đến a[i-1] để chèn a[i] vào danh sách. Dời chỗ các phần tử từ a[pos] đến a[i-1] sang phải 1 vị trí để dành chổ cho a[i].Bước 4: a[pos] = x;//chèn x, có đoạn a[0],…,a[i] đã được sắp.Bước 5: i = i+1; nếu i < n ® lặp lại bước 2, ngược lại ® Dừng.CH 2: Nếu dãy ban đầu đã được sắp xếp thì thuật toán sắp xếp chèn sẽ thực hiện như thế nào?Đáp án chuẩn: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. 2. THUẬT TOÁN SẮP XẾP CHỌNHĐ 2. Tìm hiểu ý tưởng thuật toán sắp xếp chọnCH 1: Quan sát sơ đồ mô phỏng, trao đổi thảo luận về ý tưởng chính của thuật toán sắp xếp chọn.Đáp án chuẩn:Tại mỗi bước lặp của thuật toán, phần tử nhỏ nhất ở mảng con chưa được sắp xếp sẽ được di chuyển về đoạn đã sắp xếp.Câu hỏiCH 1: Thực hiện mô phỏng sắp xếp theo thuật toán sắp xếp chọn dãy sau: 4, 8, 2, 1, 3.Đáp án chuẩn:Bước 1: i = 0;Bước 2: Tìm phần tử a[min] nhỏ nhất trong dãy hiện hành từ a[i] đến a[n-1].Bước 3: Đổi chỗ a[min] và a[i].Bước 4: Nếu i < n-1 thì gán i = i+1; rồi lặp lại bước 2, ngược lại -> Dừng.CH 2: Theo thuật toán sắp xếp chọn, sau mỗi bước thứ i thì các phần tử A[0]. A[1]..... A[i] đã được sắp xếp đúng. Đúng hay sai?Đáp án chuẩn:Đúng.3. THUẬT TOÁN SẮP XẾP NỔI BỌTHĐ 3. Tìm hiểu các ý tưởng thuật toán sắp xếp nổi bọtCH 1: Cùng trao đổi, thảo luận về các ý tưởng của thuật toán sắp xếp nổi bọt.Đáp án chuẩn: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 hỏiCH 1: Mô tả các bước thuật toán sắp xếp nổi bọt của dãy A = [4, 3, 1, 2]Đáp án chuẩn:Bắt đầu từ vị trí đầu tiên, so sánh các cặp số với nhau, nếu không đúng thứ tự thì đảo vị trí. Sau khi chạy tới cuối danh sách, tiếp tục chạy lại từ vị trí đầu danh sách cho đến khi hoàn thành so sánh và đảo vị trí.CH 2: Khi nào thì các mũi tên ở tất cả các bước trong sơ đồ mô phỏng thuật toán sắp xếp nổi bọt đều có màu đỏ?Đáp án chuẩn:Thuật toán sắp xếp nổi bọt 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ự. 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 và không cần hoán đổi nữa.LUYỆN TẬPCH 1: Cho dãy A= [5, 8, 1, 0, 10, 4, 3]. Viết các chương trình sắp xếp dãy A theo thứ tự tăng dần theo các thuật toán sắp xếp chèn, sắp xếp chọn và sắp xếp nội bọt.Đáp án chuẩn: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 arrA = [5, 8, 1, 0, 10, 4, 3]sorted_A = insertion_sort(A)print( Dãy A sau khi sắp xếp chèn:

Đáp án chuẩn:

Ý tưởng 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âu hỏi

CH 1: Mô phỏng chi tiết các bước lặp sắp xếp chèn dãy A = [5, 0, 4, 2, 3]

Đáp án chuẩn:

  • Bước 1: i = 1;//giả sử có đoạn a[0] đã được sắp xếp

  • Bước 2: x = a[i];

  • Bước 3: Tìm vị trí pos thích hợp trong đoạn a[0] đến a[i-1] để chèn a[i] vào danh sách. Dời chỗ các phần tử từ a[pos] đến a[i-1] sang phải 1 vị trí để dành chổ cho a[i].

  • Bước 4: a[pos] = x;//chèn x, có đoạn a[0],…,a[i] đã được sắp.

  • Bước 5: i = i+1; nếu i < n ® lặp lại bước 2, ngược lại ® Dừng.

CH 2: Nếu dãy ban đầu đã được sắp xếp thì thuật toán sắp xếp chèn sẽ thực hiện như thế nào?

Đáp án chuẩn:

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. 

2. THUẬT TOÁN SẮP XẾP CHỌN

HĐ 2. Tìm hiểu ý tưởng thuật toán sắp xếp chọn

CH 1: Quan sát sơ đồ mô phỏng, trao đổi thảo luận về ý tưởng chính của thuật toán sắp xếp chọn.

Đáp án chuẩn:

Tại mỗi bước lặp của thuật toán, phần tử nhỏ nhất ở mảng con chưa được sắp xếp sẽ được di chuyển về đoạn đã sắp xếp.

Câu hỏi

CH 1: Thực hiện mô phỏng sắp xếp theo thuật toán sắp xếp chọn dãy sau: 4, 8, 2, 1, 3.

Đáp án chuẩn:

  • Bước 1: i = 0;
  • Bước 2: Tìm phần tử a[min] nhỏ nhất trong dãy hiện hành từ a[i] đến a[n-1].
  • Bước 3: Đổi chỗ a[min] và a[i].
  • Bước 4: Nếu i < n-1 thì gán i = i+1; rồi lặp lại bước 2, ngược lại -> Dừng.

CH 2: Theo thuật toán sắp xếp chọn, sau mỗi bước thứ i thì các phần tử A[0]. A[1]..... A[i] đã được sắp xếp đúng. Đúng hay sai?

Đáp án chuẩn:

Đúng.

3. THUẬT TOÁN SẮP XẾP NỔI BỌT

HĐ 3. Tìm hiểu các ý tưởng thuật toán sắp xếp nổi bọt

CH 1: Cùng trao đổi, thảo luận về các ý tưởng của thuật toán sắp xếp nổi bọt.

Đáp án chuẩn:

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 hỏi

CH 1: Mô tả các bước thuật toán sắp xếp nổi bọt của dãy A = [4, 3, 1, 2]

Đáp án chuẩn:

Bắt đầu từ vị trí đầu tiên, so sánh các cặp số với nhau, nếu không đúng thứ tự thì đảo vị trí. Sau khi chạy tới cuối danh sách, tiếp tục chạy lại từ vị trí đầu danh sách cho đến khi hoàn thành so sánh và đảo vị trí.

CH 2: Khi nào thì các mũi tên ở tất cả các bước trong sơ đồ mô phỏng thuật toán sắp xếp nổi bọt đều có màu đỏ?

Đáp án chuẩn:

Thuật toán sắp xếp nổi bọt 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ự. 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 và không cần hoán đổi nữa.

LUYỆN TẬP

CH 1: Cho dãy A= [5, 8, 1, 0, 10, 4, 3]. Viết các chương trình sắp xếp dãy A theo thứ tự tăng dần theo các thuật toán sắp xếp chèn, sắp xếp chọn và sắp xếp nội bọt.

Đáp án chuẩn:

  • 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)

  • 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)

  • 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)

CH 2: Viết chương trình nhập một dãy số từ bàn phím, các số cách nhau bởi dấu cách, thực hiện sắp xếp dãy đã nhập theo một trong các thuật toán sắp xếp rồi in kết quả ra màn hình.

Đáp án chuẩn:

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

lst = list(map(int, input("Nhập dãy số cách nhau bởi dấu cách: ").split()))

# Sắp xếp dãy số theo thuật toán sắp xếp chọn

for i in range(len(lst)):

   min_idx = i

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

       if lst[j] < lst[min_idx]:

           min_idx = j

   lst[i], lst[min_idx] = lst[min_idx], lst[i]

# In kết quả ra màn hình

print("Dãy số đã sắp xếp:", lst)

VẬN DỤNG

CH 1: Viết lại các thuật toán sắp xếp trong bài theo thứ tự giảm dần.

Đáp án chuẩn:

  1. Gán i = 0
  2. Gán j = i + 1 và min = A[i]
  3. Nếu j < n:
    • Nếu A[j] < A[min] thì min = j
    • j = j + 1
    • Quay lại bước 3
  4. Đổi chỗ A[min] và A[i]
  5. Nếu i < n – 1:
    • Đúng thì i = i + 1 và quay lại bước 2
    • Sai thì dừng lại

CH 2: Nêu ý nghĩa thực tế của các thuật toán sắp xếp đã học chẳng hạn sắp xếp các học Sinh trong lớp theo chiều cao tăng dần.

Đáp án chuẩn:

Ý nghĩa: Tối ưu hóa thời gian thực thi, tạo độ thứ tự, áp dụng trong nhiều lĩnh vực, nền tảng cho các thuật toán phức tạp hơn.

Thêm kiến thức môn học

Bình luận

Giải bài tập những môn khác