Giải Tin học 11 Bài 22: Thực hành bài toán sắp xếp
Khởi động trang 104 Tin học 11: 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?
Lời giải:
Nếu muốn sắp xếp danh sách theo thứ tự giảm dần thay vì thứ tự tăng dầ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. Cụ thể,cần đảo ngược dấu so sánh.
Luyện tập
Luyện tập 1 trang 105 Tin học 11: 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.
Lời giải:
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)
Luyện tập 2 trang 105 Tin học 11: 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.
Lời giải:
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
Vận dụng trang 105 Tin học 11: 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.
Lời giải:
# Đọ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("-----")
Xem thêm lời giải bài tập SGK Tin học 11 Kết nối tri thức hay, chi tiết khác:
Câu hỏi liên quan
# Đọ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("-----")
Xem thêm
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)
Xem thêm
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)
Xem thêm
Nếu muốn sắp xếp danh sách theo thứ tự giảm dần thay vì thứ tự tăng dầ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. Cụ thể,cần đảo ngược dấu so sánh.
Xem thêm
Xem tất cả hỏi đáp với chuyên mục: Thực hành bài toán sắp xếp
Được cập nhật 11/09/2023
567 lượt xem