Trong bài này mình sẽ giới thiệu đến các bạn thuật toán sắp xếp chọn (Selection Sort). Đây là một trong những thuật toán sắp xếp căn bản trong C++.
Bài viết này được đăng tại
freetuts.net
Bạn đang đọc: Thuật toán sắp xếp chọn (Selection Sort)
, không được copy dưới mọi hình thức.
Chúng ta sẽ cùng nhau khám phá về sắp xếp chọn là gì. Cách tiến hành thuật toán trong C + + và ví dụ đơn cử vận dụng thuật toán để những bạn hiểu rõ hơn .
Tóm Tắt
1. Sắp xếp chọn là gì?
Sắp xếp chọn là một trong những thuật toán đơn thuần. Nó triển khai việc làm so sánh những thành phần trong list .
Danh sách chứa các phần tử sẽ được chia làm hai phần. Phần ở bên trái là phần được sắp xếp (sort list) và phần ở bên phải là phần chưa được sắp xếp (unsorted list).
Ban đầu chưa được sắp xếp thì phần sorted list sẽ trống và phần unsorted list sẽ chứa tất cả các phần tử ban đầu.
Phần tử nhỏ nhất trong list sẽ được chọn và tráo đổi với vị trí tiên phong trong list, tiếp đến sẽ là vị trí nhỏ thứ hai liên tục được tráo đổi ngay sau vị trí nhỏ nhất .
Ví dụ minh họa:
Như những bạn thấy ở hình trên. Ở Step1, list bắt đầu là 7 5 4 2. Trong list, số 2 là nhỏ nhất vì thế chọn số 2 vào sorted list và thay thế sửa chữa vị trí số 7. Như vậy phần sorted list đã có số 2 và phần unsorted list còn lại 3 số là 5 4 7 .
Ở Step2, tất cả chúng ta mở màn tìm số nhỏ thứ hai trong list đó là số 4. Tiếp tục chọn số 4 vào sorted list ở vị trí ngay sau số 2 là số nhỏ nhất. Trong sorted list giờ đây có hai số là 2 5 và unsorted list còn lại hai số là 5 7 .
Cứ như vậy Step3 và Step4 sẽ tìm số nhỏ tiếp theo trong list và chọn vào sorted list, cho đến khi những thành phần trong list đã sắp xếp xong .
Thuật toán sắp xếp chọn (Selection Sort) trong C++.
Trong phần này mình sẽ đưa ra các bước để viết thuật toán, sau đó sẽ để thuật toán mình đã viết cho các bạn dễ hình dung.
Giải thích thuật toán
- Thiết lập giá trị nhỏ nhất ( min ) về vị trí số 0 .
-
Tạo vòng lặp for để di chuyển ranh giới của sorted list và unsorted list.
- Tìm thành phần nhỏ nhất trong list chưa được sắp xếp .
-
Sau khi tìm được phần tử nhỏ nhất thì đổi chỗ phần tử đó với phần tử đầu tiên. Ở bước này chúng ta cần viết một hàm
Swap()
, hàm này mình sẽ viết ở bên dưới. - Lặp lại cho tới khi list được sắp xếp xong .
Thuật toán sắp xếp chọn
void selectionSort(int arr[], int n) { int i, j, min_idx; // Di chuyển ranh giới của mảng đã sắp xếp và chưa sắp xếp for (i = 0; i < n-1; i++) { // Tìm phần tử nhỏ nhất trong mảng chưa sắp xếp min_idx = i; for (j = i+1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // Đổi chỗ phần tử nhỏ nhất với phần tử đầu tiên swap(arr[min_idx], arr[i]); } }
Hàm swap()
:
void swap(int &xp, int &yp) { int temp = xp; xp = yp; yp = temp; }
Ví dụ sắp xếp chọn trong mảng
Trong phần ví dụ sắp xếp chọn này, tất cả chúng ta sẽ thực hành thực tế một bài toán đơn thuần đó là :
- Tạo mảng gồm các phần tử được nhập từ bàn phím.
- Tiến hành sắp xếp các phần tử sử dụng phương pháp sắp xếp chọn.
- Hiển thị mảng đã sắp xếp ra màn hình.
Gợi ý:
- Việc đầu tiên sẽ viết hàm
swap()
để thực hiện công việc tráo đổi vị trí khi tìm được phần tử nhỏ nhất trong mảng. - Tiếp đến viết hàm
selectionSort()
để thực hiện công việc sắp xếp các phần tử trong mảng. - Viết hàm
printSort()
để in mảng đã được sắp xếp. - Tạo mảng gồm các phần tử được nhập từ bàn phím trong hàm
main()
. Gọi hàmselectionSort()
để sắp xếp. - Cuối cùng gọi hàm
printSort()
để in mảng ra màn hình.
Code mẫu:
#include#include using namespace std; // Hàm đổi chỗ 2 số nguyên void swap(int &xp, int &yp) { int temp = xp; xp = yp; yp = temp; } // Hàm selection sort void selectionSort(int arr[], int n) { int i, j, min_idx; // Di chuyển ranh giới của mảng đã sắp xếp và chưa sắp xếp for (i = 0; i < n-1; i++) { // Tìm phần tử nhỏ nhất trong mảng chưa sắp xếp min_idx = i; for (j = i+1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // Đổi chỗ phần tử nhỏ nhất với phần tử đầu tiên swap(arr[min_idx], arr[i]); } } /* Hàm xuất mảng */ void printArray(int arr[], int size) { int i; for (i=0; i < size; i++){ cout << arr[i]; cout<<"\t"; } } int main() { int n; int a[n]; do{ cout << "\nNhập vào số lượng phần tử có trong mảng: "; cin >> n; }while(n <= 0); for(int i = 0;i < n;i++){ cout<<"a["<> a[i]; }; selectionSort(a, n); cout<<"Mảng sau khi được sắp xếp: \n"; printArray(a, n); cout<<"\n---------------------------------------\n"; cout<<"Chương trình này được đăng tại Freetuts.net"; }
Kết quả:
Như vậy là tất cả chúng ta đã triển khai xong chương trình sắp xếp mảng bằng chiêu thức sắp xếp chọn. Cũng như kết thúc hướng dẫn thuật toán sắp xếp chon ( Selection Sort ) trong C + +. Chúc những bạn thực thi thành công xuất sắc ! ! !
Source: https://final-blade.com
Category: Kiến thức Internet