# SORT VỚI STRUCT
## 1. Hàm sort()
a. Sắp xếp mảng a [0..n-1] tăng dần
```cpp
sort(a, a+n);
```
b. Sắp xếp mảng a [1..n] tăng dần
```cpp
sort(a+1, a+n+1);
```
VD: sx đoạn a[2..8] tăng dần: `sort(a+2,a+9)`
c. Sắp xếp mảng a giảm dần:
```cpp
sort(a, a+n, greater<int>() );
```
## 2. Kiểu DL tự định nghĩa struct.
VD: phân số, tọa độ,...
```cpp
struct PHANSO
{
int tu, mau;
};
```
Cộng 2 phân số, so sánh 2 phân số: Cách 1: dùng hàm, Cách 2: định nghĩa phép toán.
a. Dùng hàm
```cpp
PHANSO cong(PHANSO a, PHANSO b)
{
PHANSO c;
c.tu=a.tu*b.mau+a.mau*b.tu;
c.mau=a.mau * b.mau;
return c;
}
PHANSO a, b, c;
c = cong(a, b);
```
b. Định nghĩa phép cộng:
```cpp
PHANSO operator+(PHANSO a, PHANSO b)
{
PHANSO c;
c.tu=a.tu*b.mau+a.mau*b.tu;
c.mau=a.mau * b.mau;
return c;
}
PHANSO a, b, c;
c = a + b;
```
## 3. Sắp xếp phân số:
a. Cách 1: Định nghĩa hàm cho biết cách sắp xếp:
```cpp
bool sosanhps(PHANSO a, PHANSO b)
{
return a.tu*b.mau < a.mau * b.tu;
}
sort(a, a+n, sosanhps); //thêm hàm so sánh vào tham số thứ 3
```
b. Định nghĩa phép so sánh nhỏ hơn (<)
```cpp
bool operator< (PHANSO a, PHANSO b)
{
return a.tu*b.mau < a.mau * b.tu;
}
sort(a, a+n); //không dùng tham số thứ 3
```
https://onlinegdb.com/1BqoLioKI
## 4. Thực hành:
### 1. Làm tiếp với kiểu PHANSO
+ Định nghĩa phép trừ, nhân, chia phân số;
+ Định nghĩa hàm rút gọn phân số;
+ Nhập 1 mảng phân số -> sắp xếp tăng dần (giảm dần) rồi in ra.
### 2. Làm lại bài Phòng khám, sử dụng struct và sort