C实现短作业优先算法
时间: 2023-08-02 21:11:31 浏览: 45
短作业优先(Shortest Job First, SJF)是一种非抢占式的进程调度算法,按照任务执行所需的CPU时间长度来安排任务的执行顺序,即先执行需要执行时间最短的任务。以下是一个简单的C语言程序实现SJF算法:
```c
#include<stdio.h>
#include<stdlib.h>
struct process{
int pid; //进程ID
int arrival_time; //到达时间
int burst_time; //执行时间
int waiting_time; //等待时间
int turnaround_time; //周转时间
int completion_time; //完成时间
};
int main(){
int n, i, j;
float avg_waiting_time = 0, avg_turnaround_time = 0;
printf("请输入进程数:");
scanf("%d", &n);
struct process p[n], temp;
for(i=0; i<n; i++){
printf("请输入第%d个进程的到达时间和执行时间:", i+1);
scanf("%d %d", &p[i].arrival_time, &p[i].burst_time);
p[i].pid = i+1;
}
//按到达时间进行排序
for(i=0; i<n; i++){
for(j=i+1; j<n; j++){
if(p[i].arrival_time > p[j].arrival_time){
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
//计算等待时间、周转时间、完成时间
int current_time = 0;
for(i=0; i<n; i++){
if(p[i].arrival_time > current_time){
current_time = p[i].arrival_time;
}
p[i].waiting_time = current_time - p[i].arrival_time;
p[i].completion_time = current_time + p[i].burst_time;
p[i].turnaround_time = p[i].completion_time - p[i].arrival_time;
current_time = p[i].completion_time;
avg_waiting_time += p[i].waiting_time;
avg_turnaround_time += p[i].turnaround_time;
}
//输出结果
printf("\n进程\t到达时间\t执行时间\t等待时间\t周转时间\n");
for(i=0; i<n; i++){
printf("%d\t%d\t\t%d\t\t%d\t\t%d\n", p[i].pid, p[i].arrival_time, p[i].burst_time, p[i].waiting_time, p[i].turnaround_time);
}
avg_waiting_time /= n;
avg_turnaround_time /= n;
printf("\n平均等待时间:%f", avg_waiting_time);
printf("\n平均周转时间:%f", avg_turnaround_time);
return 0;
}
```
在这个程序中,我们首先输入进程数量和每个进程的到达时间和执行时间。然后,我们按到达时间对进程进行排序。接下来,我们计算每个进程的等待时间、周转时间和完成时间。最后,我们输出每个进程的详细信息以及平均等待时间和平均周转时间。