Sắp xếp chọn
Trang này sẽ giới thiệu ngắn gọn về chọn lọc (Selection Sort).
Định nghĩa
Sắp xếp chọn (Tiếng Anh: Selection sort) là một thuật toán sắp xếp đơn giản và trực quan. Nguyên lý là ở mỗi bước tìm phần tử nhỏ thứ i (tức là phần tử nhỏ nhất trong A_{i..n}), rồi hoán đổi phần tử đó với phần tử tại vị trí i của mảng.
Tính chất
Tính ổn định
Tính ổn định của selection sort phụ thuộc vào cách triển khai.
Nếu dùng danh sách liên kết (linked list), vì chèn/xóa ở vị trí bất kỳ có thể là O(1), ta không cần dùng swap; mỗi lần chọn phần tử nhỏ nhất từ phần chưa sắp và chèn nó trước phần đầu của phần chưa sắp sẽ đảm bảo tính ổn định.
Nếu dùng mảng (cách thường dùng trong OI), chèn/xóa ở giữa mảng là O(n), nên thường dùng swap để di chuyển phần tử, dẫn đến lựa chọn mảng của selection sort là không ổn định.
Ví dụ cài đặt dưới đây đều dùng hoán đổi phần tử trong mảng, nên là không ổn định.
Độ phức tạp thời gian
Độ phức tạp thời gian tốt nhất, trung bình và tệ nhất của selection sort đều là O(n^2).
Cài đặt
Pseudocode
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Last updated on this page:, Update history
Found an error? Want to help improve? Edit this page on GitHub!
Contributors to this page:OI-wiki
All content on this page is provided under the terms of the CC BY-SA 4.0 and SATA license, additional terms may apply