用C++语言编程短作业优先(SJF)算法的实现
时间: 2024-01-29 20:03:24 浏览: 32
好的,下面是用C++语言编写短作业优先(SJF)算法的实现:
```c++
#include<iostream>
using namespace std;
struct Process {
int pid; // 进程ID
int bt; // 进程的执行时间
};
// 按进程的执行时间对进程进行排序
void sort(Process proc[], int n) {
for(int i = 0; i < n - 1; i++) {
for(int j = 0; j < n - i - 1; j++) {
if(proc[j].bt > proc[j+1].bt) {
Process temp = proc[j];
proc[j] = proc[j+1];
proc[j+1] = temp;
}
}
}
}
// 计算等待时间和平均等待时间
void findWaitingTime(Process proc[], int n, int wt[]) {
wt[0] = 0; // 第一个进程的等待时间为0
for(int i = 1; i < n; i++) {
wt[i] = proc[i-1].bt + wt[i-1];
}
}
// 计算周转时间和平均周转时间
void findTurnAroundTime(Process proc[], int n, int wt[], int tat[]) {
for(int i = 0; i < n; i++) {
tat[i] = proc[i].bt + wt[i];
}
}
// 打印进程信息
void print(Process proc[], int n, int wt[], int tat[]) {
cout << "进程ID 执行时间 等待时间 周转时间" << endl;
for(int i = 0; i < n; i++) {
cout << proc[i].pid << "\t\t" << proc[i].bt << "\t\t" << wt[i] << "\t\t" << tat[i] << endl;
}
}
// 计算平均等待时间和平均周转时间
void findAvgTime(Process proc[], int n) {
int wt[n], tat[n], total_wt = 0, total_tat = 0;
sort(proc, n); // 按进程执行时间排序
findWaitingTime(proc, n, wt); // 计算等待时间
findTurnAroundTime(proc, n, wt, tat); // 计算周转时间
print(proc, n, wt, tat); // 打印进程信息
// 计算总等待时间和总周转时间
for(int i = 0; i < n; i++) {
total_wt += wt[i];
total_tat += tat[i];
}
// 计算平均等待时间和平均周转时间
float avg_wt = (float)total_wt / (float)n;
float avg_tat = (float)total_tat / (float)n;
cout << "平均等待时间 = " << avg_wt << endl;
cout << "平均周转时间 = " << avg_tat << endl;
}
// 主函数
int main() {
Process proc[] = {{1, 6}, {2, 8}, {3, 7}, {4, 3}};
int n = sizeof(proc) / sizeof(proc[0]);
findAvgTime(proc, n);
return 0;
}
```
上面的代码实现了短作业优先(SJF)算法,它按进程的执行时间对进程进行排序,然后计算等待时间和周转时间,并打印进程信息和平均等待时间和平均周转时间。