短作业优先调度算法c++
时间: 2023-11-17 14:06:24 浏览: 186
短作业优先调度算法(Shortest Job First,SJF)是一种非抢占式的调度算法,它根据作业的执行时间来选择最短的作业进行调度。它假设每个作业的执行时间是已知的,并且在调度之前已经确定。
SJF调度算法的主要思想是,选择剩余执行时间最短的作业来执行。这样可以最大限度地减少平均等待时间,并确保短作业能够迅速完成。
以下是一个使用C语言实现SJF调度算法的示例代码:
```c
#include <stdio.h>
void sjf(int n, int bt[]) {
int wt[n], tat[n], total_wt = 0, total_tat = 0;
// 计算等待时间
wt[0] = 0;
for (int i = 1; i < n; i++) {
wt[i] = bt[i - 1] + wt[i - 1];
total_wt += wt[i];
}
// 计算周转时间
for (int i = 0; i < n; i++) {
tat[i] = bt[i] + wt[i];
total_tat += tat[i];
}
// 输出结果
printf("作业\t执行时间\t等待时间\t周转时间\n"); for (int i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\n", i + 1, bt[i], wt[i], tat[i]);
}
// 输出平均等待时间和平均周转时间
printf("平均等待时间: %.2f\n", (float)total_wt / n);
printf("平均周转时间: %.2f\n", (float)total_tat / n);
}
int main() {
int n;
printf("请输入作业数量: ");
scanf("%d", &n);
int bt[n];
printf("请输入每个作业的执行时间:\n");
for (int i = 0; i < n; i++) {
printf("作业 %d: ", i + 1);
scanf("%d", &bt[i]);
}
sjf(n, bt);
return 0;
}
```
阅读全文