求复杂度分析
  • 板块灌水区
  • 楼主danzong_dan
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/21 21:49
  • 上次更新2025/1/22 09:17:47
查看原帖
求复杂度分析
715456
danzong_dan楼主2025/1/21 21:49

如下代码:

#include <vector>
#include <future>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <chrono>

std::vector<int> sleeping_sort(const std::vector<int> &arr) {
    std::queue<int> q;
    std::mutex mtx;
    std::condition_variable cv;
    bool all_done = false;
    std::atomic<int> remaining = arr.size();
    
    std::vector<std::future<void> > futures;
    for (int num: arr) {
        futures.emplace_back(std::async(std::launch::async,
            [num, &q, &mtx, &cv, &remaining, &all_done]() {
                std::this_thread::sleep_for(std::chrono::milliseconds(num)); {
                    std::lock_guard lock(mtx);
                    q.push(num);
                }
                cv.notify_one();

                if (--remaining == 0) {
                    std::lock_guard<std::mutex> lock(mtx);
                    all_done = true;
                    cv.notify_all();
                }
        }));
    }
    
    std::vector<int> result;
    while (true) {
        std::unique_lock lock(mtx);
        cv.wait(lock, [&] { return all_done || !q.empty(); });

        while (!q.empty()) {
            result.push_back(q.front());
            q.pop();
        }

        if (all_done) break;
    }

    return result;
}
2025/1/21 21:49
加载中...