Thư viện algorithm

Hướng dẫn chi tiết thư viện algorithm trong C++

2

1. Algorithm là gì?

<algorithm> là thư viện có sẵn trong C++, cung cấp nhiều thuật toán để xử lý mảng, vector và các cấu trúc dữ liệu.

Để sử dụng thư viện này, chúng ta viết:

#include <algorithm>
    

Một số hàm thường dùng:

Hàm Công dụng
sort() Sắp xếp phần tử
find() Tìm một phần tử
max() Tìm giá trị lớn hơn
min() Tìm giá trị nhỏ hơn
reverse() Đảo ngược phần tử
count() Đếm số lần xuất hiện
swap() Hoán đổi hai giá trị

2. Hàm sort()

sort() dùng để sắp xếp các phần tử theo thứ tự tăng dần hoặc giảm dần.

Cú pháp

sort(begin, end);
    

Trong đó:

  • begin: vị trí bắt đầu.
  • end: vị trí kết thúc.

Ví dụ với mảng

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int a[] = {5, 2, 8, 1, 3};

    sort(a, a + 5);

    for (int i = 0; i < 5; i++)
    {
        cout << a[i] << " ";
    }

    return 0;
}
    

Kết quả:

1 2 3 5 8
    

Sắp xếp giảm dần

sort(a, a + 5, greater<int>());
    

Kết quả:

8 5 3 2 1
    

3. sort() với vector

Khi sử dụng vector, có thể dùng begin()end().

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> a = {5, 2, 8, 1, 3};

    sort(a.begin(), a.end());

    for (int x : a)
    {
        cout << x << " ";
    }

    return 0;
}
    

Kết quả:

1 2 3 5 8
    

4. Hàm find()

find() dùng để tìm một giá trị trong mảng hoặc vector.

Cú pháp

find(begin, end, value);
    

Ví dụ

int a[] = {10, 20, 30, 40, 50};

int *viTri = find(a, a + 5, 30);

if (viTri != a + 5)
{
    cout << "Tim thay";
}
else
{
    cout << "Khong tim thay";
}
    

Trong ví dụ trên, chương trình tìm số 30.

Kết quả:

Tim thay
    

Nếu không tìm thấy, find() trả về vị trí end.

5. Hàm max()

max() dùng để lấy giá trị lớn hơn giữa hai giá trị.

int a = 10;
int b = 20;

int ketQua = max(a, b);

cout << ketQua;
    

Kết quả:

20
    

6. Hàm min()

min() dùng để lấy giá trị nhỏ hơn giữa hai giá trị.

int a = 10;
int b = 20;

int ketQua = min(a, b);

cout << ketQua;
    

Kết quả:

10
    

7. Hàm reverse()

reverse() dùng để đảo ngược thứ tự các phần tử.

int a[] = {1, 2, 3, 4, 5};

reverse(a, a + 5);
    

Kết quả:

5 4 3 2 1
    

8. Hàm count()

count() dùng để đếm xem một giá trị xuất hiện bao nhiêu lần.

int a[] = {1, 2, 2, 3, 2, 4};

int soLan = count(a, a + 6, 2);

cout << soLan;
    

Kết quả:

3
    

Vì số 2 xuất hiện 3 lần.

9. Hàm swap()

swap() dùng để hoán đổi giá trị của hai biến.

int a = 10;
int b = 20;

swap(a, b);

cout << a << " " << b;
    

Kết quả:

20 10
    

10. Ví dụ tổng hợp

Ví dụ sử dụng nhiều hàm trong thư viện <algorithm>:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector<int> a = {5, 2, 8, 2, 1, 3};

    // Sắp xếp
    sort(a.begin(), a.end());

    // Đảo ngược
    reverse(a.begin(), a.end());

    // Đếm số 2
    int soLan = count(a.begin(), a.end(), 2);

    // Tìm số 5
    auto viTri = find(a.begin(), a.end(), 5);

    // Tìm lớn nhất
    int lonNhat = *max_element(a.begin(), a.end());

    // Tìm nhỏ nhất
    int nhoNhat = *min_element(a.begin(), a.end());

    cout << "So lan xuat hien cua 2: "
         << soLan << endl;

    cout << "Lon nhat: "
         << lonNhat << endl;

    cout << "Nho nhat: "
         << nhoNhat << endl;

    return 0;
}
    

11. Bảng tổng kết

Hàm Chức năng Ví dụ
sort() Sắp xếp sort(a, a + n)
find() Tìm phần tử find(a, a + n, x)
max() Lấy số lớn hơn max(a, b)
min() Lấy số nhỏ hơn min(a, b)
reverse() Đảo ngược reverse(a, a + n)
count() Đếm phần tử count(a, a + n, x)
swap() Hoán đổi swap(a, b)
max_element() Tìm phần tử lớn nhất max_element(a, a + n)
min_element() Tìm phần tử nhỏ nhất min_element(a, a + n)

12. Kết luận

Thư viện <algorithm> giúp lập trình viên sử dụng các thuật toán có sẵn thay vì phải tự viết lại từ đầu.

Các hàm nên học trước gồm: sort(), find(), max(), min(), reverse(), count(), swap().

Hướng dẫn chi tiết thư viện algorithm trong C++