### Khái niệm về thuật toán sắp xếp
Thuật toán sắp xếp là một tập hợp các quy tắc hoặc phương pháp được sử dụng để tổ chức lại các phần tử trong một danh sách hoặc mảng theo một thứ tự nhất định, thường là theo thứ tự tăng dần hoặc giảm dần. Thuật toán sắp xếp có thể áp dụng cho nhiều loại dữ liệu khác nhau, bao gồm số, chuỗi và đối tượng.
### Các loại thuật toán sắp xếp
1. **Sắp xếp nổi bọt (Bubble Sort)**:
- Là thuật toán đơn giản nhất, hoạt động bằng cách so sánh từng cặp phần tử liền kề và hoán đổi chúng nếu chúng không theo thứ tự mong muốn. Quy trình này được lặp lại cho đến khi không còn hoán đổi nào cần thiết.
- **Độ phức tạp**: O(n²)
2. **Sắp xếp chọn (Selection Sort)**:
- Thuật toán này tìm phần tử nhỏ nhất (hoặc lớn nhất) trong danh sách và hoán đổi nó với phần tử đầu tiên. Quy trình này tiếp tục cho các phần tử còn lại.
- **Độ phức tạp**: O(n²)
3. **Sắp xếp chèn (Insertion Sort)**:
- Thuật toán này xây dựng danh sách đã sắp xếp một cách tuần tự bằng cách chèn từng phần tử vào vị trí thích hợp trong danh sách đã sắp xếp.
- **Độ phức tạp**: O(n²)
4. **Sắp xếp nhanh (Quick Sort)**:
- Đây là một thuật toán phân chia và chinh phục, hoạt động bằng cách chọn một "pivot" và phân chia danh sách thành hai phần: các phần tử nhỏ hơn và lớn hơn pivot, sau đó gọi đệ quy trên các phần đó.
- **Độ phức tạp**: O(n log n) trung bình
5. **Sắp xếp hợp nhất (Merge Sort)**:
- Cũng là một thuật toán phân chia và chinh phục, nó chia danh sách thành hai nửa, sắp xếp từng nửa rồi hợp nhất lại với nhau.
- **Độ phức tạp**: O(n log n)