Ngủ Sắp xếp là một thuật toán sắp xếp số nguyên tôi tìm thấy trên Internet. Nó mở một luồng đầu ra và cho mỗi số đầu vào song song, trì hoãn số giây và xuất số đó. Do sự chậm trễ, số lượng cao nhất sẽ được xuất ra cuối cùng. Tôi ước tính nó có O (n + m), trong đó n là số phần tử và m là số cao nhất.
Đây là mã gốc trong Bash
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
Đây là mã giả
sleepsort(xs)
output = []
fork
for parallel x in xs:
sleep for x seconds
append x to output
wait until length(output) == length(xs)
return output
Nhiệm vụ của bạn là thực hiện Sắp xếp giấc ngủ như một chức năng trong ngôn ngữ lập trình bạn chọn. Bạn có thể bỏ qua mọi yếu tố đồng thời như điều kiện cuộc đua và không bao giờ khóa bất kỳ tài nguyên được chia sẻ nào. Mã ngắn nhất sẽ thắng. Định nghĩa hàm tính vào chiều dài mã.
Danh sách đầu vào chỉ giới hạn ở các số nguyên không âm và độ dài của danh sách đầu vào dự kiến sẽ dài một cách hợp lý (kiểm tra ít nhất 10 số) để điều kiện cuộc đua không bao giờ xảy ra. và giả sử điều kiện chủng tộc không bao giờ xảy ra.