Bỏ qua

Thuật toán sắp xếp

Một thuật toán sắp xếp sắp đặt một tập hợp dữ liệu theo một thứ tự cụ thể. Các thuật toán sắp xếp có ứng dụng rộng rãi vì dữ liệu được sắp xếp thường có thể được tìm kiếm, phân tích và xử lý hiệu quả hơn.

Như được hiển thị trong hình dưới đây, dữ liệu được sắp xếp có thể là số nguyên, số thực dấu phẩy động, ký tự, chuỗi ký tự, v.v. Quy tắc sắp xếp có thể được định nghĩa theo nhu cầu, chẳng hạn như thứ tự số học, thứ tự ASCII hoặc một quy tắc tùy chỉnh.

Ví dụ về kiểu dữ liệu và tiêu chí

Các khía cạnh đánh giá

Hiệu suất thực thi: Chúng ta kỳ vọng độ phức tạp thời gian của thuật toán sắp xếp càng thấp càng tốt, với tổng số phép toán nhỏ hơn (giảm hệ số hằng số trong độ phức tạp thời gian). Đối với khối lượng dữ liệu lớn, hiệu suất thực thi đặc biệt quan trọng.

Đặc tính tại chỗ: Đúng như tên gọi, sắp xếp tại chỗ thực hiện sắp xếp bằng cách thao tác trực tiếp trên mảng ban đầu mà không cần thêm mảng phụ trợ, từ đó tiết kiệm bộ nhớ. Thông thường, sắp xếp tại chỗ liên quan đến ít thao tác di chuyển dữ liệu hơn và chạy nhanh hơn.

Tính ổn định: Sắp xếp ổn định đảm bảo rằng thứ tự tương đối của các phần tử bằng nhau trong mảng không thay đổi sau khi quá trình sắp xếp hoàn tất.

Sắp xếp ổn định là điều kiện cần thiết cho các kịch bản sắp xếp đa cấp. Giả sử chúng ta có một bảng lưu trữ thông tin học sinh, trong đó cột 1 và cột 2 lần lượt là tên và tuổi. Trong trường hợp này, sắp xếp không ổn định có thể làm mất đi tính chất đã được sắp xếp của dữ liệu đầu vào:

# Dữ liệu đầu vào được sắp xếp theo tên
# (tên, tuổi)
  ('A', 19)
  ('B', 18)
  ('C', 21)
  ('D', 19)
  ('E', 23)

# Giả sử chúng ta sử dụng một thuật toán sắp xếp không ổn định để sắp xếp danh sách theo tuổi.
# Trong kết quả, vị trí tương đối của ('D', 19) và ('A', 19) bị thay đổi,
# do đó tính chất sắp xếp theo tên của dữ liệu đầu vào bị mất đi.
  ('B', 18)
  ('D', 19)
  ('A', 19)
  ('C', 21)
  ('E', 23)

Tính thích ứng: Sắp xếp thích ứng có thể tận dụng thông tin thứ tự sẵn có trong dữ liệu đầu vào để giảm lượng tính toán, đạt được hiệu suất thời gian tốt hơn. Độ phức tạp thời gian trong trường hợp tốt nhất của các thuật toán sắp xếp thích ứng thường tốt hơn độ phức tạp thời gian trung bình của chúng.

Dựa trên so sánh hoặc không dựa trên so sánh: Sắp xếp dựa trên so sánh phụ thuộc vào các toán tử so sánh (\(<\), \(=\), \(>\)) để xác định thứ tự tương đối của các phần tử, từ đó sắp xếp toàn bộ mảng, với độ phức tạp thời gian tối ưu trên lý thuyết là \(O(n \log n)\). Sắp xếp không dựa trên so sánh không sử dụng các toán tử so sánh và có thể đạt được độ phức tạp thời gian là \(O(n)\), nhưng khả năng áp dụng rộng rãi của nó tương đối hạn chế.

Thuật toán sắp xếp lý tưởng

Nhanh, tại chỗ, ổn định, thích ứng và áp dụng rộng rãi. Rõ ràng, cho đến nay vẫn chưa có thuật toán sắp xếp nào được phát hiện kết hợp được tất cả các đặc tính này. Do đó, khi lựa chọn thuật toán sắp xếp, cần quyết định dựa trên các đặc tính cụ thể của dữ liệu và yêu cầu của bài toán.

Tiếp theo, chúng ta sẽ xem xét các thuật toán sắp xếp khác nhau và phân tích ưu điểm cũng như nhược điểm của chúng dựa trên các khía cạnh đánh giá ở trên.