# 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