Câu lạc bộ Tin học dành cho học sinh Tiểu học

HỌC C++ 💡tiết 9 - thuật toán (Algorithms)

Trạng thái

♥ Lượt xem: 7
♥ Lượt phản hồi: 0

Tham gia
28/10/2025
Bài viết
368
Điểm Like
1,748
Điểm Uy tín
364,562
Tí Tinh Tế
Miu Mềm Mại
Rồng Rực Rỡ
Tỵ Tinh Tường
Heo Hiền Hậu
Tuổi Mùi
Phù điêu Hổ
Phù điêu Rồng
Hổ Hào Hiệp
Ngựa Ngộ Nghĩnh
Dê Dịu Dàng
Tích cực hoạt động

Mục tiêu tiết 9: Hiểu và viết được các thuật toán cơ bản trong C++​

1️⃣ Thuật toán là gì?​

Thuật toán (Algorithm)một dãy các bước cụ thể giúp bạn giải quyết một vấn đề.
Ví dụ: bạn muốn sắp xếp một danh sách số theo thứ tự tăng dần → cần có thuật toán sắp xếp.

2️⃣ Các loại thuật toán cơ bản bạn cần biết​

NhómVí dụMục đích
Tìm kiếm (Searching)Linear Search, Binary SearchTìm phần tử trong mảng
Sắp xếp (Sorting)Bubble Sort, Selection Sort, Quick SortSắp xếp dữ liệu
Đệ quy (Recursion)Tính giai thừa, FibonacciGiải bài toán bằng cách gọi lại chính nó
Thuật toán tham lam (Greedy)Chọn đồng xu tối ưuTối ưu từng bước nhỏ nhất
Thuật toán đồ thị (Graph)Dijkstra, BFS, DFSTìm đường đi hoặc kết nối trong mạng

3️⃣ Bắt đầu với ví dụ: Tìm kiếm nhị phân (Binary Search)

👉 Dùng khi mảng đã được sắp xếp tăng dần.
Thay vì duyệt từng phần tử, ta chia đôi liên tục để tìm nhanh hơn.

🔹 Code ví dụ:​

Mã:
#include <iostream>
using namespace std;

int binarySearch(int arr[], int n, int x) {
    int left = 0, right = n - 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (arr[mid] == x)
            return mid; // tìm thấy
        else if (arr[mid] < x)
            left = mid + 1; // tìm bên phải
        else
            right = mid - 1; // tìm bên trái
    }
    return -1; // không tìm thấy
}

int main() {
    int arr[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
    int n = sizeof(arr) / sizeof(arr[0]);
    int x = 23;

    int result = binarySearch(arr, n, x);
    if (result != -1)
        cout << "Tìm thấy " << x << " tại vị trí " << result;
    else
        cout << "Không tìm thấy!";
}
🧠 Giải thích:
  • Giả sử có 10 phần tử.
  • Ở mỗi bước, bạn loại bỏ một nửa mảng.
  • Thời gian tìm kiếm chỉ còn O(log n) thay vì O(n).

4️⃣ Thuật toán sắp xếp: Bubble Sort (nổi bọt)

Mã:
#include <iostream>
using namespace std;

void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n-1; i++) {
        for (int j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                swap(arr[j], arr[j+1]);
            }
        }
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    bubbleSort(arr, n);
    cout << "Mảng sau khi sắp xếp: ";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}
📊 Độ phức tạp: O(n²)
💡 Dễ hiểu, nhưng chậm với mảng lớn.

5️⃣ Thử thách nhỏ 💪

Hãy tự viết thuật toán đệ quy tính giai thừa (n!)
Gợi ý:
Mã:
int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}
 

Trạng thái

♥ Lượt xem: 7
♥ Lượt phản hồi: 0

Trên Bottom