c语言编写SJF算法
时间: 2023-07-26 08:20:36 浏览: 128
以下是 C 语言编写的 SJF(Shortest Job First)算法示例代码:
```c
#include <stdio.h>
// 进程结构体
typedef struct {
int pid; // 进程 ID
int burst; // 进程执行时间
int arrival;// 进程到达时间
int wait; // 进程等待时间
int turn; // 进程周转时间
} process;
int main() {
int n, i, j;
float avg_wait = 0, avg_turn = 0;
process p[10], tmp;
printf("请输入进程数量:");
scanf("%d", &n);
// 输入每个进程的信息
for (i = 0; i < n; i++) {
printf("请输入进程 %d 的执行时间和到达时间:", i + 1);
scanf("%d%d", &p[i].burst, &p[i].arrival);
p[i].pid = i + 1;
p[i].wait = p[i].turn = 0;
}
// 按照到达时间排序
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (p[j].arrival > p[j + 1].arrival) {
tmp = p[j];
p[j] = p[j + 1];
p[j + 1] = tmp;
}
}
}
// 计算等待时间和周转时间
int time = p[0].arrival;
for (i = 0; i < n; i++) {
int min_burst = 99999, idx = -1;
for (j = i; j < n; j++) {
if (p[j].arrival <= time && p[j].burst < min_burst) {
min_burst = p[j].burst;
idx = j;
}
}
if (idx == -1) {
time = p[i].arrival;
i--;
continue;
}
p[idx].wait = time - p[idx].arrival;
p[idx].turn = p[idx].wait + p[idx].burst;
time += p[idx].burst;
}
// 计算平均等待时间和平均周转时间
for (i = 0; i < n; i++) {
avg_wait += p[i].wait;
avg_turn += p[i].turn;
}
avg_wait /= n;
avg_turn /= n;
// 输出每个进程的信息
printf("\n进程ID\t执行时间\t到达时间\t等待时间\t周转时间\n");
for (i = 0; i < n; i++) {
printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\n", p[i].pid, p[i].burst, p[i].arrival, p[i].wait, p[i].turn);
}
// 输出平均等待时间和平均周转时间
printf("\n平均等待时间:%f\n平均周转时间:%f\n", avg_wait, avg_turn);
return 0;
}
```
该程序输入每个进程的执行时间和到达时间,按照到达时间排序,然后计算每个进程的等待时间和周转时间。最后输出每个进程的信息以及平均等待时间和平均周转时间。
注:该程序假设进程的到达时间按照升序排列。如果进程的到达时间没有按照升序排列,则需要先将它们按照到达时间排序。
阅读全文