Giải chi tiết Tin học 11 định hướng KHMT Kết nối mới bài 21: Các thuật toán sắp xếp đơn giản

Giải bài 21: Các thuật toán sắp xếp đơn giản sách Tin học 11 định hướng KHMT kết nối. Phần đáp án chuẩn, hướng dẫn giải chi tiết cho từng bài tập có trong chương trình học của sách giáo khoa. Hi vọng, các em học sinh hiểu và nắm vững kiến thức bài học.

Khởi động

Câu hỏi. 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ó bốn phần tử.

Hướng dẫn trả lờ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.

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

Hoạt động 1: Tìm hiểu ý tưởng thuật toán sắp xếp chèn

Câu hỏi: 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.

Hướng dẫn trả lờ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 hỏi 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]

Hướng dẫn trả lời:

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.

Câu hỏi 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?

Hướng dẫn trả lờ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.

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

Hoạt động 2: Tìm hiểu ý tưởng thuật toán sắp xếp chọn

Câu hỏi. 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.

Hướng dẫn trả lời:

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 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.

Hướng dẫn trả lời:

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.

Câu hỏi 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?

Hướng dẫn trả lời:

Đúng vì 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].

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

Hoạt động 3: Tìm hiểu ý tưởng thuật toán sắp xếp nổi bật

Câu hỏi 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]

Hướng dẫn trả lời:

  • Bắt đầu từ vị trí đầu tiên của danh sách (bên trái), so sánh các cặp số với nhau, nếu không đúng thứ tự nhỏ-lớn 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í.

Câu hỏi 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 đỏ?

Hướng dẫn trả lờ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ác phần tử trong mảng sẽ được so sánh với phần tử tiếp theo và nếu chúng không được sắp xếp đúng thứ tự thì chúng sẽ được hoán đổi cho nhau. Các phần tử sẽ được lặp lại và các hoán đổi sẽ tiếp tục được thực hiện cho đến khi tất cả các phần tử đều được sắp xếp theo thứ tự đúng.

Luyện tập

Câu hỏi 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.

Hướng dẫn trả lờ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 hỏi 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.

Hướng dẫn trả lời:

# 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

Câu hỏi 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.

Hướng dẫn trả lời:

  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

Câu hỏi 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.

Hướng dẫn trả lờ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.

Tìm kiếm google: Giải tin học 11 kết nối bài 21 Các thuật toán sắp xếp đơn giảnn giản, Giải tin học 11 kết nối tri thức bài 21, Giải tin học KNTT bài 21

Xem thêm các môn học

Giải tin học 11 định hướng Khoa học máy tính KNTT mới


Copyright @2024 - Designed by baivan.net