Tin học 11 · Chung, Khoa học máy tính và Tin học ứng dụng
Tin họcLớp 11Phần 6. KHMT · Chủ đề 6. Kĩ thuật lập trình · Chọn định hướng, không bắt buộc THUD

Bài 21 · KHMT. Các thuật toán sắp xếp đơn giản

Mục tiêu bài học

  • Giải thích và vận dụng kiến thức về các thuật toán sắp xếp đơn giản.
  • Tạo hoặc đánh giá sản phẩm cụ thể, giải thích kết quả và kiểm tra điều kiện áp dụng.

Bài giảng

Hiểu cách hoạt động

Sắp xếp chọn đưa phần tử nhỏ nhất đoạn chưa sắp về đầu; chèn đưa phần tử mới vào đoạn đầu đã sắp; nổi bọt đổi cặp kề sai thứ tự. Phải nêu thuật toán và lượt cụ thể vì cùng dãy có vết khác. Bảo toàn phần tử kể cả lặp. Mã mẫu chọn trực tiếp trên bản sao để không đổi danh sách nguồn.

Làm và tự kiểm tra

Chương trình mẫu đã kiểm tra bằng thực thi trong quá trình biên soạn:

def sap(a):
    b=a.copy()
    for i in range(len(b)-1):
        k=i
        for j in range(i+1,len(b)):
            if b[j]<b[k]:
                k=j
        b[i],b[k]=b[k],b[i]
    return b
b=sap([5,1,4,1])
print(b[0]*10+b[-1])

Với đầu vào cố định như chương trình, kết quả in: 15. Dãy1,1,4,5 nên10*1+5=15.

Sắp xếp chèn: giữ đoạn đầu đã sắp

Bắt đầu i=1,lưu khóa b[i]; dịch sang phải các phần tử đoạn0..i−1 lớn hơn khóa,rồi đặt khóa vào chỗ trống. Với[3,1,2]:sau chèn1 được[1,3,2];sau chèn2 được[1,2,3]. Lưu khóa trước dịch để không mất phần tử.

def chen(a):
    b=a.copy()
    for i in range(1,len(b)):
        x=b[i]
        j=i-1
        while j>=0 and b[j]>x:
            b[j+1]=b[j]
            j-=1
        b[j+1]=x
    return b

Đã tăng sẵn thì mỗi khóa không dịch; dãy rỗng/1phần tử được giữ.

Nổi bọt: công bố rõ hướng quét

Ở biến thể này,một lượt quét trái→phải,đổi hai phần tử kề khi trái lớn hơn phải; cuối lượt phần tử lớn nhất đoạn đang xét về bên phải. Với[3,1,2],lượt đầu đổi3/1rồi3/2 thành[1,2,3]. Không nhầm vết với biến thể quét ngược; cả hai có thể đúng nhưng phải nêu quy ước.

def bot(a):
    b=a.copy()
    for end in range(len(b)-1,0,-1):
        doi=False
        for j in range(end):
            if b[j]>b[j+1]:
                b[j],b[j+1]=b[j+1],b[j]
                doi=True
        if not doi:
            break
    return b

[5,1,4,1]qua các lượt chính:[1,4,1,5]→[1,1,4,5];giữ đủ hai số1 và không đổi nguồn.

Ghi nhớ

Sắp xếp chọn đưa phần tử nhỏ nhất đoạn chưa sắp về đầu; chèn đưa phần tử mới vào đoạn đầu đã sắp; nổi bọt đổi cặp kề sai thứ tự.

Bài tập

Đã đúng 0/6 câu

  1. Câu 1Mức 2Trả lời ngắn

    Chương trình Python sau in ra số nào?

    def sap(a):
        b=a.copy()
        for i in range(len(b)-1):
            k=i
            for j in range(i+1,len(b)):
                if b[j]<b[k]:
                    k=j
            b[i],b[k]=b[k],b[i]
        return b
    print(sap([3,1,2])[1])
    
  2. Câu 2Mức 2Trả lời ngắn

    Chương trình Python sau in ra số nào?

    def sap(a):
        b=a.copy()
        for i in range(len(b)-1):
            k=i
            for j in range(i+1,len(b)):
                if b[j]<b[k]:
                    k=j
            b[i],b[k]=b[k],b[i]
        return b
    print(len(sap([4,4,1])))
    
  3. Câu 3Mức 2Trả lời ngắn

    Chương trình Python sau in ra số nào?

    def sap(a):
        b=a.copy()
        for i in range(len(b)-1):
            k=i
            for j in range(i+1,len(b)):
                if b[j]<b[k]:
                    k=j
            b[i],b[k]=b[k],b[i]
        return b
    print(sap([-2,-5,0])[0])
    
  4. Câu 4Mức 2Trắc nghiệm 1 đáp án

    Thuật toán chọn làm gì mỗi lượt?

  5. Câu 5Mức 2Đúng / Sai

    Sắp xếp được phép bỏ giá trị trùng để dãy tăng.

  6. Câu 6Mức 2Sắp xếp thứ tự

    Sắp xếp các bước theo phương pháp giải của nhiệm vụ này.

    Sắp xếp các mục theo thứ tự đúng (kéo thả hoặc dùng nút mũi tên).

    1. 1Sao chép dãy
    2. 2Chọn nhỏ nhất phần còn lại
    3. 3Tiếp tục và kiểm tra bảo toàn
    4. 4Đổi với đầu phần chưa sắp
  7. Câu 7Mức 3Tự luận

    Cài đặt sắp xếp chọn cho danh sách [5,1,4,1] trên một bản sao, sau đó in 10*b[0]+b[-1]. Viết mã hoàn chỉnh và giải thích dãy kết quả.

    0 từ

    0/10 ảnh

    Có thể chụp nhiều trang. Ảnh được lưu cùng bài làm và giáo viên sẽ chấm trên ảnh.

    Vẽ bài làm

    Ảnh bài làm

    Cuộn chuột hoặc chụm hai ngón để phóng to · kéo để di chuyển · phím R để xoay

  8. Câu 8Mức 4Tự luận

    Mô tả lượt đầu cho[3,1,2]:chọn tìm min toàn phần còn lại;chèn bắt đầu phần tử thứ hai;nổi bọt quét trái→phải cả lượt. Nêu sự khác nhau của ba vết.

    0 từ

    0/10 ảnh

    Có thể chụp nhiều trang. Ảnh được lưu cùng bài làm và giáo viên sẽ chấm trên ảnh.

    Vẽ bài làm

    Ảnh bài làm

    Cuộn chuột hoặc chụm hai ngón để phóng to · kéo để di chuyển · phím R để xoay