sjf调度算法c
时间: 2023-12-12 21:12:15 浏览: 36
SJF(Shortest Job First)是一种短作业优先调度算法,它是根据作业的执行时间长短来进行调度的。执行时间短的作业优先执行,以减少平均等待时间和平均周转时间。
下面是一个基于C语言的SJF调度算法实现:
```
#include<stdio.h>
#include<conio.h>
void main() {
int p, i, j, ct[10], wt[10], tat[10], total = 0, pos, temp;
float avg_wt, avg_tat;
int bt[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
printf("\nEnter number of process:");
scanf("%d", &p);
printf("\nEnter Burst Time:\n");
for (i = 0; i < p; i++) {
printf("P[%d]:", i + 1);
scanf("%d", &bt[i]);
}
// 排序
for (i = 0; i < p; i++) {
pos = i;
for (j = i + 1; j < p; j++) {
if (bt[j] < bt[pos])
pos = j;
}
temp = bt[i];
bt[i] = bt[pos];
bt[pos] = temp;
}
// 计算等待时间
wt[0] = 0;
for (i = 1; i < p; i++) {
wt[i] = 0;
for (j = 0; j < i; j++)
wt[i] += bt[j];
total += wt[i];
}
avg_wt = (float)total / p;
total = 0;
printf("\nProcess\t Burst Time \tWaiting Time\tTurnaround Time");
for (i = 0; i < p; i++) {
tat[i] = bt[i] + wt[i]; // 计算周转时间
total += tat[i];
printf("\nP[%d]\t\t %d\t\t %d\t\t\t%d", i + 1, bt[i], wt[i], tat[i]);
}
avg_tat = (float)total / p;
printf("\n\nAverage Waiting Time=%f", avg_wt);
printf("\nAverage Turnaround Time=%f", avg_tat);
getch();
}
```
在这个代码中,我们首先输入进程数和每个进程的执行时间,然后按照执行时间进行排序。接下来,计算每个进程的等待时间和周转时间,并输出平均等待时间和平均周转时间。