#include #include #include // 使用优先队列 #include using namespace std;

// 定义作业结构体 struct Job { int id; // 作业 ID int arrivalTime; // 到达时间 int burstTime; // 执行时间 int completionTime; // 完成时间 int turnaroundTime; // 周转时间 int waitingTime; // 等待时间 Job(int _id, int _arrivalTime, int _burstTime) { id = _id; arrivalTime = _arrivalTime; burstTime = _burstTime; } };

// 按到达时间排序 bool compareArrivalTime(const Job& j1, const Job& j2) { return j1.arrivalTime < j2.arrivalTime; }

// 定义优先队列的比较函数 struct CompareBurstTime { bool operator()(const Job& j1, const Job& j2) { return j1.burstTime > j2.burstTime; } };

void sjf(vector& jobs) { sort(jobs.begin(), jobs.end(), compareArrivalTime); int n = jobs.size(); vector done(n, false); int currentTime = 0; int completed = 0; priority_queue<Job, vector, CompareBurstTime> pq; // 定义优先队列 while (completed < n) { // 将当前到达的作业加入优先队列 for (int i = 0; i < n; i++) { if (!done[i] && jobs[i].arrivalTime <= currentTime) { pq.push(jobs[i]); } } // 没有可执行的作业,时间向前推进 if (pq.empty()) { currentTime++; } else { // 执行队首作业 Job j = pq.top(); pq.pop(); currentTime += j.burstTime; done[j.id] = true; completed++; // 记录完成时间等信息 j.completionTime = currentTime; j.turnaroundTime = j.completionTime - j.arrivalTime; j.waitingTime = j.turnaroundTime - j.burstTime; jobs[j.id] = j; } } // 输出结果 cout << "作业 到达时间 执行时间 完成时间 周转时间 等待时间" << endl; for (int i = 0; i < n; i++) { Job j = jobs[i]; cout << j.id << "\t" << j.arrivalTime << "\t" << j.burstTime << "\t" << j.completionTime << "\t" << j.turnaroundTime << "\t" << j.waitingTime << endl; } }

int main() { vector jobs; jobs.push_back(Job(0, 0, 3)); jobs.push_back(Job(1, 1, 2)); jobs.push_back(Job(2, 2, 1)); jobs.push_back(Job(3, 3, 4)); sjf(jobs); return 0; }

C++实现短作业优先调度算法(使用优先队列)

原文地址: https://www.cveoy.top/t/topic/gCm2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录