短进程优先调度算法C语言
时间: 2023-08-13 11:11:44 浏览: 126
短进程优先调度算法(Shortest Job First,简称SJF)是一种非抢占式的进程调度算法,它根据每个进程的执行时间来选择优先级。
实现SJF调度算法可以使用如下的C语言代码:
```c
#include <stdio.h>
#define MAX 10 //最大进程数
//进程结构体
typedef struct process {
int pid; //进程ID
int burstTime; //进程执行时间
} process;
int main() {
int n, i, j;
float avgWaitingTime = 0, avgTurnaroundTime = 0; //平均等待时间和平均周转时间
process p[MAX], temp;
printf("请输入进程数:");
scanf("%d", &n);
//输入进程信息
for(i = 0; i < n; i++) {
printf("请输入第%d个进程的ID和执行时间:", i + 1);
scanf("%d%d", &p[i].pid, &p[i].burstTime);
}
//按进程执行时间从小到大排序
for(i = 0; i < n - 1; i++) {
for(j = i + 1; j < n; j++) {
if(p[i].burstTime > p[j].burstTime) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
//计算等待时间和周转时间
int waitingTime[MAX] = {0}, turnaroundTime[MAX] = {0};
waitingTime[0] = 0;
for(i = 1; i < n; i++) {
waitingTime[i] = waitingTime[i - 1] + p[i - 1].burstTime;
turnaroundTime[i] = waitingTime[i] + p[i].burstTime;
avgWaitingTime += waitingTime[i];
avgTurnaroundTime += turnaroundTime[i];
}
avgWaitingTime /= n;
avgTurnaroundTime /= n;
//输出结果
printf("进程ID\t执行时间\t等待时间\t周转时间\n");
for(i = 0; i < n; i++) {
printf("%d\t%d\t\t%d\t\t%d\n", p[i].pid, p[i].burstTime, waitingTime[i], turnaroundTime[i]);
}
printf("平均等待时间:%.2f\n平均周转时间:%.2f", avgWaitingTime, avgTurnaroundTime);
return 0;
}
```
上述代码中,我们使用结构体 `process` 来存储每个进程的ID和执行时间。首先输入进程数和每个进程的ID和执行时间,然后按照执行时间从小到大排序,接着计算每个进程的等待时间和周转时间,并统计平均等待时间和平均周转时间,最后输出结果。
阅读全文