Sắp xếp chọn – Minh họa trong Python và Scratch
Sắp xếp chọn – Minh họa trong Python và Scratch
Mình họa Sắp xếp chọn qua ví dụ cụ thể
Chúng ta sử dụng danh sách [4, 6, 3, 7, 14, 9] và áp dụng thuật toán sắp xếp chọn. Quá trình diễn ra như sau:
-
Bước 1: Tìm phần tử nhỏ nhất trong đoạn chưa được sắp xếp, ở đây là 3. Hoán đổi 3 với phần tử đầu tiên của đoạn chưa được sắp xếp.
- Danh sách sau bước này: [3, 6, 4, 7, 14, 9]
-
Bước 2: Tìm phần tử nhỏ nhất trong đoạn chưa được sắp xếp từ vị trí thứ hai trở đi, ở đây là 4. Hoán đổi 4 với phần tử thứ hai của đoạn chưa được sắp xếp.
- Danh sách sau bước này: [3, 4, 6, 7, 14, 9]
-
Bước 3: Tiếp tục quá trình tương tự cho các phần tử còn lại. Tìm phần tử nhỏ nhất và hoán đổi vị trí nó với phần tử đầu đoạn chưa được sắp xếp.
- Danh sách sau mỗi bước: [3, 4, 6, 7, 9, 14]
- Khi không còn đoạn chưa được sắp xếp nào, quá trình sắp xếp chọn kết thúc và kết quả là danh sách đã được sắp xếp: [3, 4, 6, 7, 9, 14] .
Triển khai thuật toán sắp xếp chọn (Selection Sort) bằng Python:
def selection_sort(arr): n = len(arr) for i in range(n): # Tìm phần tử nhỏ nhất trong đoạn chưa được sắp xếp min_idx = i for j in range(i + 1, n): if arr[j] < arr[min_idx] : min_idx = j # Hoán đổi phần tử nhỏ nhất với phần tử đầu đoạn chưa được sắp xếp arr[i] , arr[min_idx] = arr[min_idx] , arr[i] return arr # Ví dụ sử dụng arr = [4, 6, 3, 7, 14, 9] sorted_arr = selection_sort(arr) print("Danh sách đã sắp xếp:", sorted_arr)
Kết quả: Danhsách đã sắpxếp: [3, 4, 6, 7, 9, 14]
Dưới đây là phân tích chi tiết về các câu lệnh trong thuật toán sắp xếp chọn (Selection Sort) ở trên:
- Định nghĩa hàm
selection_sort
và truyền danh sách cần sắp xếp (arr
) vào hàm. - Gán biến
n
bằng độ dài của danh sách (len(arr)
). Biếnn
đại diện cho số lượng phần tử trong danh sách. - Bắt đầu vòng lặp
for i in range(n)
để duyệt qua từng vị trí trong danh sách. - Trong vòng lặp ngoài, khởi tạo biến
min_idx
và gán giá trịi
cho nó. Biếnmin_idx
sẽ lưu chỉ số của phần tử nhỏ nhất trong đoạn chưa được sắp xếp. - Bắt đầu vòng lặp
for j in range(i + 1, n)
để duyệt qua từng phần tử trong đoạn chưa được sắp xếp, bắt đầu từ phần tử tiếp theo sau phần tử hiện tại. - Trong vòng lặp này, ta kiểm tra nếu phần tử tại
arr[j]
nhỏ hơn phần tử nhỏ nhất hiện tại (arr[min_idx]
), thì ta gán giá trịj
chomin_idx
. Điều này sẽ cập nhật chỉ số của phần tử nhỏ nhất trong đoạn chưa được sắp xếp. - Sau khi vòng lặp
for j
kết thúc, ta đã tìm được chỉ sốmin_idx
của phần tử nhỏ nhất trong đoạn chưa được sắp xếp. - Tiếp theo, ta hoán đổi vị trí của phần tử nhỏ nhất (
arr[min_idx]
) với phần tử đầu đoạn chưa được sắp xếp (arr[i]
). Ta sử dụng cú pháp hoán đổi giá trị trong Python bằng cách sử dụng gán đồng thời (arr[i] , arr[min_idx] = arr[min_idx] , arr[i]
). - Quá trình hoán đổi này đảm bảo rằng phần tử nhỏ nhất sẽ được đưa vào đúng vị trí đầu của đoạn chưa được sắp xếp.
- Tiếp tục vòng lặp
for i
cho đến khi duyệt qua tất cả các phần tử trong danh sách. - Khi vòng lặp
for i
kết thúc, danh sách đã được sắp xếp và ta trả về danh sách đã sắp xếp (arr
). - Kết thúc định nghĩa hàm
selection_sort
. - Tạo một danh sách (
arr
) và gán giá trị vào danh sách. Trong ví dụ này, danh sách được gán giá trị là [4, 6, 3, 7, 14, 9] . - Gọi hàm
selection_sort(arr)
để sắp xếp danh sách. - In danh sách đã sắp xếp ra màn hình.
Sắp xếp chọn (Selection Sort) minh họa bằng Scratch
Trong môi trường Scratch, thuật toán sắp xếp chọn (Selection Sort) có thể được triển khai như sau:
- Tạo một danh sách (List) và gán giá trị vào danh sách. Trong ví dụ này, chúng ta sử dụng danh sách [4, 6, 3, 7, 14, 9] .
- Tạo một biến (Variable) “length” và gán giá trị bằng độ dài của danh sách.
- Tạo một biến (Variable) “i” và đặt giá trị ban đầu là 1.
- Bắt đầu một vòng lặp (Loop) cho đến khi “i” lớn hơn hoặc bằng “length”.
- Trong vòng lặp, tạo một biến (Variable) “min_idx” và đặt giá trị ban đầu là “i”.
- Tạo một biến (Variable) “j” và đặt giá trị ban đầu là “i + 1”.
- Tạo một vòng lặp (Loop) cho đến khi “j” lớn hơn “length”.
- Trong vòng lặp “j”, tạo một điều kiện (If) để kiểm tra nếu giá trị của danh sách tại “j” nhỏ hơn giá trị của danh sách tại “min_idx”.
- Trong điều kiện “If”, đặt giá trị của “j” cho “min_idx”.
- Sau khi vòng lặp “j” kết thúc, ta đã tìm được chỉ số của phần tử nhỏ nhất trong đoạn chưa được sắp xếp.
- Tạo một điều kiện (If) để kiểm tra nếu “min_idx” khác “i”.
- Trong điều kiện “If”, sử dụng khối hoán đổi (Swap) để hoán đổi giá trị của danh sách tại “i” và “min_idx”.
- Tăng giá trị của “i” lên 1.
- Quay lại bước 4 để tiếp tục vòng lặp cho đến khi “i” lớn hơn hoặc bằng “length”.
- Khi vòng lặp kết thúc, danh sách đã được sắp xếp theo thứ tự tăng dần.
Lưu ý rằng hình ảnh minh họa chỉ mang tính chất đại diện cho cách thuật toán hoạt động trong Scratch và không phải là một chương trình Scratch hoàn chỉnh.