Hàm swap trong lập trình C/C++ – Hàm hoán vị giá trị 2 biến

Trong lập trình C/C++, hàm swap hoán đổi giá trị của hai biến cho nhau được sử dụng rất nhiều, đặc biệt trong các bài toán sắp xếp. Trong bài viết này, chúng ta sẽ tìm hiểu về tư tưởng của bài toán hoán vị và cách viết hàm swap trong lập trình C/C++.

Tư tưởng bài toán hoán vị

Hãy tưởng tượng bạn có hai cốc nước, cốc A chứa nước lọc và cốc B chứa nước cam. Làm thế nào để hoán đổi nước cam từ cốc A sang cốc B và ngược lại?

Để thực hiện việc này, ta cần một cốc phụ, gọi là cốc C. Quá trình hoán đổi như sau:

  1. Đổ nước lọc từ cốc A vào cốc C.
  2. Đổ nước cam từ cốc B vào cốc A.
  3. Đổ nước lọc từ cốc C vào cốc B.

Kết quả cuối cùng sẽ là cốc A chứa nước cam và cốc B chứa nước lọc. Trên thực tế, trong lập trình ta cũng áp dụng tương tự. Ta khai báo một biến tạm gọi là temp, sau đó gán temp=A, A=B, B=temp. Như vậy, ta đã hoán đổi thành công giá trị của hai biến A và B.

Hàm swap xây dựng sẵn trong thư viện C++

Trong thư viện iostream của C++, đã có sẵn hàm swap với cú pháp:
void swap(object A, object B)

Ở đây, A và B có thể là bất kỳ kiểu dữ liệu nào từ int, float đến một struct hay thậm chí là một đối tượng class.

Dưới đây là một đoạn code minh họa cho việc hoán đổi hai biến kiểu dữ liệu int:

#include 

int main() {
    int a = 3;
    int b = 5;

    std::cout << "Nhap 2 so a, b: ";
    std::cin >> a >> b;

    std::cout << "Ban da nhap: a = " << a << " b = " << b << std::endl;

    std::swap(a, b);

    std::cout << "Sau khi swap: a = " << a << " b = " << b << std::endl;

    return 0;
}

Kết quả chạy chương trình:

Nhap 2 so a, b: 3 5
Ban da nhap: a = 3 b = 5
Sau khi swap: a = 5 b = 3

Một chương trình hoán vị không sử dụng hàm con

Việc hoán đổi hai biến có thể được thực hiện trực tiếp trong hàm main mà không cần sử dụng hàm con. Tuy nhiên, trong thực tế, điều này không được khuyến khích vì không tối ưu. Mỗi lần hoán đổi hai phần tử, ta phải viết lại lệnh hoán đổi.

Dưới đây là đoạn code mẫu:

#include 

int main() {
    int a = 3;
    int b = 5;

    std::cout << "Nhap 2 so a, b: ";
    std::cin >> a >> b;

    std::cout << "Ban da nhap: a = " << a << " b = " << b << std::endl;

    int temp = a;
    a = b;
    b = temp;

    std::cout << "Sau khi swap: a = " << a << " b = " << b << std::endl;

    return 0;
}

Kết quả khi chạy chương trình cũng sẽ như ví dụ trên.

Viết hàm hoán vị với C

Dưới đây là một đoạn chương trình con ví dụ. Hãy thử dự đoán kết quả trước khi chạy chương trình.

#include 

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int a = 3;
    int b = 5;

    printf("Nhap 2 so a, b: ");
    scanf("%d %d", &a, &b);

    printf("Ban da nhap: a = %d, b = %dn", a, b);

    swap(&a, &b);

    printf("Sau khi swap: a = %d, b = %dn", a, b);

    return 0;
}

Kết quả khi chạy chương trình:

Nhap 2 so a, b: 3 5
Ban da nhap: a = 3, b = 5
Sau khi swap: a = 5, b = 3

Như vậy, chương trình đã hoán đổi thành công giá trị của hai biến A và B.

Viết hàm hoán vị với C++

Dưới đây là một đoạn code mẫu cho việc viết hàm swap trong C++. Với sự hỗ trợ của tham chiếu, code sẽ trở nên đơn giản và dễ hiểu hơn so với việc sử dụng tham trỏ trong C.

#include 

void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

int main() {
    int a = 2;
    int b = 5;

    std::cout << "Nhap 2 so a, b: ";
    std::cin >> a >> b;

    std::cout << "Ban da nhap: a = " << a << " b = " << b << std::endl;

    swap(a, b);

    std::cout << "Sau khi swap: a = " << a << " b = " << b << std::endl;

    return 0;
}

Kết quả khi chạy chương trình:

Nhap 2 so a, b: 2 5
Ban da nhap: a = 2 b = 5
Sau khi swap: a = 5 b = 2

Cuối cùng, xin cảm ơn bạn đã đọc bài viết này. Chúc bạn học tốt và sớm trở thành một Developer chuyên nghiệp!

[Xem tất cả bài viết chủ đề C/C++ tại đây]

FEATURED TOPIC