Đáp án Tin 11 Khoa học máy tính Kết nối bài 22 Thực hành bài toán sắp xếp

Đáp án bài 22 Thực hành bài toán sắp xếp. 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 22 - THỰC HÀNH BÀI TOÁN SẮP XẾP

MỞ ĐẦU

CH 1: Trong bài 21, em đã được học cách triển khai thuật toán sắp xếp để sắp xếp các phần tử trong danh sách theo thứ tự tăng dần. Nếu cần sắp xếp theo thứ tự ngược lại thì câu lệnh so sánh tương ứng trong vòng lặp sẽ cần thay đổi như thế nào?

Đáp án chuẩn:

Ta cần thay đổi câu lệnh so sánh trong vòng lặp của thuật toán sắp xếp. 

LUYỆN TẬP

CH 1: Sử dụng thuật toán sắp xếp chọn viết lại chương trình trong Nhiệm vụ 1.

Đáp án chuẩn:

def selection_sort(arr):

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

  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]

# Đọc dữ liệu từ file kho.inp

with open('kho.inp', 'r') as file:

 lines = file.readlines()

 quantities = [int(line.strip()) for line in lines]

# Sắp xếp danh sách số lượng các mặt hàng theo thứ tự tăng dần

selection_sort(quantities)

# In danh sách số lượng các mặt hàng đã được sắp xếp ra màn hình

print("Danh sách số lượng các mặt hàng sau khi sắp xếp:")

for quantity in quantities:

 print(quantity)

CH 2: Sử dụng thuật toán sắp xếp nổi bọt viết lại chương trình trong Nhiệm vụ 2.

Đáp án chuẩn:

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]

# Đọc dữ liệu từ file diem.inp

with open('diem.inp', 'r') as file:

 lines = file.readlines()

 scores = [float(line.strip()) for line in lines]

# Sắp xếp danh sách điểm trung bình giảm dần

bubble_sort(scores)

# In danh sách điểm trung bình đã được sắp xếp ra màn hình

print("Danh sách điểm trung bình giảm dần:")

for score in scores:

 print(score)

VẬN DỤNG

CH 1: Một người đi mua hàng với danh sách các mặt hàng cần mua, đơn giá từng mặt hàng và số lượng hàng cần mua được lưu trong tệp văn bản muahang.inp. Hãy sử dụng thuật toán nỗi bọt để sắp xếp các mặt hàng theo thứ tự thành tiền của các mặt hàng tăng dần rồi in ra tên các mặt hàng và thành tiền tương ứng.

Đáp án chuẩn:

# Đọc dữ liệu từ file muahang.inp

with open('muahang.inp', 'r') as file:

 lines = file.readlines()

 mat_hangs = []

 for line in lines:

  data = line.strip().split(',')

  ten = data[0]

  don_gia = float(data[1])

  so_luong = int(data[2])

  thanh_tien = don_gia * so_luong

  mat_hangs.append((ten, thanh_tien))

# Sắp xếp danh sách các mặt hàng theo thứ tự thành tiền tăng dần

n = len(mat_hangs)

for i in range(n - 1):

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

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

   mat_hangs[j], mat_hangs[j + 1] = mat_hangs[j + 1], mat_hangs[j]

# In danh sách các mặt hàng và thành tiền tương ứng ra màn hình

print("Danh sách các mặt hàng và thành tiền tương ứng:")

for mat_hang in mat_hangs:

 print("Tên mặt hàng: ", mat_hang[0])

 print("Thành tiền: ", mat_hang[1])

 print("-----")

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