Cách dùng hàm sort trong C++ chi tiết

Hàm sort trong C++ là một hàm giúp chúng ta sắp xếp, bố trí các phần tử trong 1 tập hợp theo 1 trình tự nào đó, giúp chúng ta dễ dàng quản lý và tìm kiếm một phần tử nào đó hơn.

Trong lập trình C++, chúng ta sẽ thường xuyên cần dùng đến hàm sắp xếp này. Trong bài viết bên dưới, IoTZone sẽ hướng dẫn bạn cách dùng hàm sort() để sắp xếp các đối tượng theo thứ tự tăng dần, giảm dần, sắp xếp theo phạm vi cụ thể hoặc theo điều kiện riêng mà bạn mong muốn.

Cú pháp của hàm sort trong C++

Hàm sort trong C++ là một thuật toán nằm trong thư viện algorithm. Trong C++ đã cài đặt một hàm sort() có tên là intro – sort, đây là sự kết hợp của 2 thuật toán sắp xếp chính là heap sort và quick sort.

Theo mặc định thì hàm này sẽ sắp xếp mảng của bạn theo thứ tự tăng dần về giá trị số hoặc theo ký tự trong từ điển. Nếu muốn sắp xếp giảm dần, bạn thêm greater().

Dưới đây là cú pháp sort mảng:

//Sắp xếp mảng a với n phần tử
sort(a, a + n);
//Sắp xếp mảng a từ chỉ số x tới chỉ số y
sort(a + x, a + y + 1);
//Sắp xếp mảng theo thứ tự giảm dần
sort(a, a + n, greater<data_type>());

Ví dụ về cách sắp xếp bằng hàm sort

Sắp xếp tăng dần

// C++ program to demonstrate default behaviour of
// sort() in STL.
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    /*Here we take two parameters, the beginning of the
    array and the length n upto which we want the array to
    be sorted*/
    sort(arr, arr + n);
 
    cout << "\nArray after sorting using "
            "default sort is : \n";
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
 
    return 0;
}

Sau khi chạy chương trình trên, chúng ta sẽ thu được kết quả output đầu ra là:

Array after sorting using default sort is : 
0 1 2 3 4 5 6 7 8 9 

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

Nếu bạn muốn sắp xếp theo thứ tự giảm dần? Hãy dùng thêm hàm Greater() mà mình đã giới thiệu ở trên nhé:

// C++ program to demonstrate descending order sort using
// greater<>().
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 1, 5, 8, 9, 6, 7, 3, 4, 2, 0 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    sort(arr, arr + n, greater<int>());
 
    cout << "Array after sorting : \n";
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
 
    return 0;
}

Kết quả thu được của chúng ta sẽ là:

Array after sorting : 
9 8 7 6 5 4 3 2 1 0 

Sắp xếp trong phạm vi nhất định

Đôi khi, chúng ta cần dùng hàm sắp xếp trong C++ để sắp xếp thứ tự trong một phạm vi giá trị nhất định. Khi đó, chúng ta chỉ cần đề cập đến phạm vi bên trong hàm sort, dưới đây là một ví dụ:

// C++ program to demonstrate sort()
 
#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int arr[] = { 0, 1, 5, 8, 9, 6, 7, 3, 4, 2 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    // Sort the elements which lies in the range of 2 to
    // (n-1)
    sort(arr + 2, arr + n);
 
    cout << "Array after sorting : \n";
    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
 
    return 0;
}
// This code is contributed by Suruchi Kumari

Sau khi chạy hàm sort trong C++ trên, chúng ta thu được kết quả:

Array after sorting : 
0 1 2 3 4 5 6 7 8 9 

Sắp xếp theo điều kiện cụ thể

Làm sao để chúng ta sắp xếp các cặp giá trị theo một điều kiện cụ thể? Bạn có thể viết 1 hàm so sánh (comparator) cho riêng mình và chuyển chúng dưới dạng tham số thứ ba.

Hàm comparator này sẽ trả về một giá trị (có thể chuyển đổi thành bool), giá trị này cho chúng ta biết liệu rằng đối số (argument) thứ nhất có nên được đặt trước đối số thứ 2 trong dãy hay không.

Ví dụ: Trong đoạn code dưới, mình đã tạo điều kiện trong hàm sort trong C++.

  • Giả sử các khoảng {6,8} và {1,9} được truyền dưới dạng đối số trong hàm so sánh (compareInterval). Mình muốn sắp xếp các khoảng theo thứ tự tăng dần của số đầu tiên trong khoảng.
  • Bây giờ, vì i1.first (=6) < i2.first (=1) là giá trị sai, nên hàm trả về giá trị “false”.
  • Khi đó, chúng ta biết rằng không nên đặt đối số thứ nhất trước đối số thứ hai => Kết quả sắp xếp sẽ là {1,9} trước rồi mới đến {6,8}




Sau khi chạy hàm sắp xếp trong C++ trên, chúng ta thu được kết quả:

Intervals sorted by start time : 
[1,9] [2,4] [4,7] [6,8] 

Lời kết

Trong bài viết này, IoTZone đã giới thiệu đến bạn cách sử dụng hàm sort trong C++, theo cả thứ tự tăng dần, giảm dần, sắp xếp trong phạm vi nhất định hoặc trong một điều kiện cụ thể. Chúc bạn thành công!

Ngoài ra, trên Website IoTZone cũng có khá nhiều các chủ đề hướng dẫn khác về C++, bạn đọc có thể theo dõi Blog hướng dẫn ngôn ngữ C để cập nhật thêm nhiều kiến thức hay nhé!

IoTZone – Chuyên cung cấp thiết bị điện tử & tài liệu cho Makers

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *