Theo như tôi biết thuật toán sắp xếp tốt nhất được viết trực tiếp bằng Prolog, không tham chiếu đến bất kỳ cách sử dụng tích hợp đặc biệt nào đó.
Tối ưu hóa thường xuyên là bắt đầu hợp nhất không với danh sách độ dài 1 nhưng với các phân đoạn đã được sắp xếp.
Đó là, để sắp xếp danh sách [4,5,3,6,2,7,1,2]
, danh sách [4,5]
, [3,6]
, [2,7]
, [1,2]
sẽ được sáp nhập.
Điều này có thể được tối ưu hóa hơn nữa bằng cách lắp ráp các danh sách được sắp xếp không chỉ theo hướng tăng dần mà còn theo hướng khác. Đối với ví dụ trên, điều này có nghĩa là phân đoạn được sắp xếp được tập hợp như sau:
[4,5|_]
[3,4,5|_]
[3,4,5,6|_]
...
Lưu ý rằng trong Prolog, bạn có thể mở rộng danh sách cả đầu và cuối.
Do đó, chúng tôi chỉ hợp nhất [1,2,3,4,5,6,7]
và [2]
.
Hệ thống hiện tại sử dụng triển khai ban đầu (~ 1984) của Richard O'Keefe là Ciao-Prolog trong ciao-1.15/lib/sort.pl
.
Chỉ cần lưu ý: vị từ đó (sử dụng pivoting/4 được triển khai trong liên kết của bạn) thực hiện sắp xếp giảm dần, bạn phải đảo ngược toán tử so sánh xoay vòng/4 để thực hiện sắp xếp tăng dần. – gusbro