Viết thuật toán sắp xếp dãy số giảm dần năm 2024

Nếu bạn có mảng string hay mảng char thì hàm sort() sẽ sắp xếp mặc định theo thứ tự từ điển tăng dần.

Ví dụ 2 :

include "iostream"

include "algorithm"

using namespace std; int main(){ char a[] = {'2', '8', 't', 'e', 'c', 'h', 'a', 'z'}; int n = 8; sort(a, a + n); cout << "Mang char sap tang dan : "; for(int i = 0; i < n; i++){

cout << a[i] << ' ';  
} sort(a, a + n, greater<char>()); cout << "\nMang char sap giam dan : "; for(int i = 0; i < n; i++){
cout << a[i] << ' ';  
} }

Output :

Mang char sap tang dan : 2 8 a c e h t z Mang char sap giam dan : z t h e c a 8 2

Cú pháp sắp xếp vector :

sort(a.begin(), a.end()); sort(a.begin() + x, a.begin() + y + 1); sort(a.begin(), a.end(), greater<data_type>());

Ví dụ 3 :

include "iostream"

include "algorithm"

using namespace std; int main(){ vector<int> v = {3, 1, 2, 5, 4}; sort(v.begin(), v.end()); cout << "Vector sap tang dan : "; for(int i = 0; i < v.size(); i++){

cout << v[i] << " ";  
} sort(v.begin(), v.end(), greater<int>()); cout << "\nVector sap giam dan : "; for(int i = 0; i < v.size(); i++){
cout << v[i] << " ";  
} }

Output :

Vector sap tang dan : 1 2 3 4 5 Vector sap giam dan : 5 4 3 2 1


2. Một số bài tập áp dụng hàm sort()

Có nhiều bài toán mà bạn có thể sử dụng bước sắp xếp trước khi xử lý, phần này mình sẽ hướng dẫn các bạn 3 ví dụ để luyện tập với hàm sort.

Bài 1. Đếm số lượng giá trị khác nhau trong mảng

Thuật toán : Sắp xếp mảng tăng dần để các giá trị giống nhau sẽ đứng cạnh nhau, khi đó bạn chỉ cần so sánh 2 phần tử kề nhau trong mảng để đếm số giá trị khác nhau. Nếu 2 phần tử đứng cạnh nhau mà bằng nhau thì bạn không cần tăng số giá trị khác nhau lên.

Mã nguồn :

include "iostream"

include "algorithm"

using namespace std; int main(){ int a[] = {1, 3, 3, 3, 2, 1, 2, 2, 2, 4, 0, 2}; int n = 12; sort(a, a + n); int dem = 1; for(int i = 1; i < n; i++){

if(a[i] != a[i - 1]){  
  ++dem;  
}  
} cout << "So gia tri khac nhau : " << dem << endl; }

Output :

So gia tri khac nhau : 5

Bài 2 : Tìm độ chênh lệch nhỏ nhất giữa 2 phần tử trong mảng

Thuật toán : Sắp xếp mảng tăng dần (hoặc giảm dần) để những giá trị gần nhau sẽ đứng cạnh nhau khi đó bạn chỉ cần xét độ chênh lệch giữa 2 phần tử đứng cạnh nhau và tìm giá trị nhỏ nhất.

Độ phức tạp sẽ là O(NlogN) thay vì O(N2) nếu bạn dùng 2 for lồng nhau để xét mọi cặp phần tử trong mảng