Thuật toán sắp xếp chọn (Selection Sort)
Phân loại: Giải thuật sắp xếp ổn định.
Cấu trúc dữ liệu: Ngẫu nhiên.
Độ phức tạp thời gian (Time Complexity): Trường hợp xấu nhất (Worst Case) O(n2).
Độ phức tạp dung lượng (Space Complexity): O(1).
Độ phức tạp bộ nhớ (Memory Complexity): O(1).
Cách hoạt động:
- Tìm phần tử nhỏ nhất trong phần chưa sắp xếp.
- Hoán đổi phần tử nhỏ nhất đó với phần tử đầu tiên của phần chưa sắp xếp.
- Di chuyển ranh giới giữa phần đã sắp xếp và phần chưa sắp xếp một phần tử sang phải.
Pseudocode:
function selectionSort(arr):
n = length(arr)
for i from 0 to n-1:
// Tìm phần tử nhỏ nhất trong phần chưa được sắp xếp
minIndex = i
for j from i+1 to n-1:
if arr[j] < arr[minIndex]:
minIndex = j
// Hoán đổi phần tử nhỏ nhất tìm được với phần tử đầu tiên của phần chưa được sắp xếp
if minIndex != i:
swap(arr[i], arr[minIndex])
return arr
Code C++:
#include <iostream>
using namespace std;
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) {
// Tìm phần tử nhỏ nhất trong phần chưa sắp xếp
int minIndex = i;
for (int j = i + 1; j < n; ++j) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// Hoán đổi phần tử nhỏ nhất tìm được với phần tử đầu tiên của phần chưa sắp xếp
if (minIndex != i) {
swap(arr[i], arr[minIndex]);
}
}
}
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
selectionSort(arr, n);
cout << "Sorted array: ";
for (int i = 0; i < n; ++i) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}