Nội dung chính tin học 11 theo định hướng khoa học máy tính cánh diều Chủ đề F(CS) Bài 8: Lập trình một số thuật toán sắp xếp

Hệ thống kiến thức trọng tâm  Chủ đề F(CS) Bài 8: Lập trình một số thuật toán sắp xếp sách tin học 11 theo định hướng khoa học máy tính cánh diều. Với các ý rõ ràng, nội dung mạch lạc, đi thẳng vào vấn đề hi vọng người đọc sẽ nắm trọn kiến thức trong thời gian rất ngắn. Nội dung chính được tóm tắt ngắn gọn sẽ giúp thầy cô ôn tập củng cố kiến thức cho học sinh. Bộ tài liệu có file tải về. Mời thầy cô kéo xuống tham khảo

Xem: => Giáo án tin học 11 theo định hướng khoa học máy tính cánh diều

BÀI 8. LẬP TRÌNH MỘT SỐ THUẬT TOÁN SẮP XẾP

1. BÀI TOÁN SẮP XẾP

- Trong tin học, thuật ngữ sắp xếp đề cấp đến việc tổ chức lại một tập hợp dữ liệu theo một tiêu chí sắp xếp, tức là đáp ứng một yêu cầu cụ thể về trình tự.

- Yêu cầu sắp xếp cần chỉ rõ cách so sánh hai mục dữ liệu để quyết định thứ tự.

Ví dụ: Bài toán sắp xếp đơn giản và minh họa bằng sắp xếp dãy số.

- Đầu vào: Dãy n số a0, a1 ,..., an – 1.

- Đầu ra: Dãy được sắp xếp theo thứ tự tăng dần (không giảm).

Sắp xếp tại chỗ và không tại chỗ

- Một thuật toán không dùng thêm một dãy khác ở bên ngoài dãy ban đầu để thực hiện sắp xếp được gọi là sắp xếp tại chỗ.

- Nếu thuật toán sử dụng một dãy khác ở bên ngoài dãy ban đầu để chứa kết quả thì gọi là sắp xếp không tại chỗ.

Nghịch thế

- Nếu i < j mà ai > aj thì cặp hai phần tử (ai, aj) gọi là một nghịch thế.

- Một thuật toán sắp xếp dựa trên ý tưởng giảm dần và tiến đến triệt tiêu các nghịch thế trong dãy.

2. THUẬT TOÁN SẮP XẾP NỔI BỌT (BUBBLE SORT)

- Ý tưởng sắp xếp nổi bọt (Bubble Sort):

+ Xét lần lượt các cặp phần tử liên tiếp: nếu ai > ai+1 thì đổi chỗ [ai, ai+1].

+ Lặp lại cho đến khi triệt tiêu hết các cặp nghịch thế.

+ Có thể chứng minh sau vòng lặp 1 thì số lớn nhất trong dãy sẽ được chuyển đến vị trí cuối dãy, tức là phần tử a[n – 1] đã ở đúng vị trí. Như vậy vòng lặp 2 chỉ cần rà soát nghịch thế và đổi chỗ đến vị trí n – 2.

- Sau vòng lặp i thì phần tử a[n – i – 1] đã ở đúng vị trí.

- Mã giả của thuật toán sắp xếp nổi bọt:

3. THUẬT TOÁN SẮP XẾP CHÈN TUYẾN TÍNH (INSERTION SORT)

Ý tưởng sắp xếp chèn tuyến tính:

- Vì dãy con a0 chỉ có một phần tử, nên dãy con này có thứ tự.

- Lặp lại việc chèn ai với 1 ≤ i < n như sau:

Xét dãy con a0,..., ai – 1 đã có thứ tự, ta chèn ai vào dãy con này sao cho dãy con sau khi chèn sẽ có thứ tự.

Mô tả thuật toán chèn tuyến tính:

Mô tả các bước của thuật toán như sau:

Bước 0. i ← 1;

Bước 1.

      if i ≥ n: kết thúc;

     else: val ← ai; k ← i – 1;

Bước 2.

     if k ≥ 0:

           if ak > val: ak + 1 ← ak; k ← k – 1; đến Bước 2;

Bước 3. ak + 1 ← val; i ← i + 1; đến Bước 1;

Để “chèn ai vào đúng chỗ của nó” trong dãy a0, a1 ,..., ai – 1 cần:

a) Tìm được chỗ đúng thứ tự của ai: Cho k đi từ i – 1 qua trái cho đến khi ak ≤ ai hoặc k = – 1.

b) Lấy ai ra khỏi dãy; dịch chuyển dãy ak + 1 ,..., ai – 1 sang phải một vị trí để có chỗ trống tại ak + 1; đưa ai vào chỗ trống đó.

Mã giả thuật toán sắp xếp chèn tuyến tính

Thuật toán sắp xếp chèn tuyến tính kết hợp làm đồng thời hai việc a) và b) theo cách dịch chuyển dần từng bước sang trái, từ vị trí i tới vị trí k + 1.

- Vòng lặp for bên ngoài kiểm soát việc thực hiện đúng n – 1 bước.

- Vòng lặp while lồng bên trong thực hiện đồng thời cùng

4. THỰC HÀNH

Nhiệm vụ 1.

a) Số lần lặp của vòng lặp bên trong với bước i sẽ không quá i.

b) Vòng lặp ngoài của thuật toán được thực hiện đúng n – 1 lần như đã nhận xét trong bài học.

c) Ước lượng độ phức tạp thời gian của thuật toán sắp xếp chèn tuyến tính là O(n2) vì không vượt quá tổng 1 + 2 + … + n – 1.

Nhiệm vụ 2. Tham khảo chương trình sau:

def sxNoibot(a):

    n = len(a)

    for i in range(n):

        CoDoiCho = False

        for k in range(n-1-i):

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

                CoDoiCho = True

                a[j], a[j+1] = a[j+1], a[j]

        if (not CoDoiCho):

            return

Nhiệm vụ 3. Tham khảo chương trình sau:

def sxChen(a): # chèn tuyến tính

    n = len(a)

    for i in range(1,n):

       val = a[i]

       j, i = i, i+1

       # dịch dần từng bước, tìm vị trí để chèn

       while(j>0) and (a[j-1] > val):

           a[j] = a[j-1]

           j = j - 1

    a[j] = val

=> Kết luận:

- Thuật toán sắp xếp nổi bọt có hai vòng lặp lồng nhau; vòng lặp trong thực hiện đổi chỗ một lượt các cặp phần tử là nghịch thế, vòng lặp ngoài kiểm tra điều kiện “không xảy ra đổi chỗ”.

- Việc tìm vị trí chèn đúng chỗ trong thuật toán sắp xếp chèn có thể thực hiện bằng cách dịch dần từng bước.

=> Giáo án Khoa học máy tính 11 cánh diều Chủ đề F(CS) Bài 8: Lập trình một số thuật toán sắp xếp

Thông tin tải tài liệu:

Phía trên chỉ là 1 phần, tài liệu khi tải về là file word, có nhiều hơn + đầy đủ đáp án. Xem và tải: Kiến thức trọng tâm tin học 11 theo định hướng khoa học máy tính cánh diều - Tại đây

Tài liệu khác

Tài liệu của bạn

Tài liệu mới cập nhật

Tài liệu môn khác

Chat hỗ trợ
Chat ngay