#include<stdio.h>
#include<string.h>
struct job{
int id;
int starttime;//作业到达系统的时间
int needtime;//作业服务的时间
int endtime;//作业的结束时间
int runtime;//作业周转的时间
double dqzztime;//作业的带权周转时间
};
main(){
struct job job[50];
int n,i;//n个作业
printf("输入作业的个数\n");
scanf("%d",&n);
printf("输入每个作业的id,到达时间,服务时间\n");
for(i=0;i<n;i++){
scanf("%d%d%d",&job[i].id,&job[i].starttime,&job[i].needtime);
}
printf("\n");
printf("作业ID\t到达系统时间\t服务时间\n");
for(i=0;i<n;i++)
{
printf(" %d\t%d\t\t%d\n",job[i].id,job[i].starttime,job[i].needtime);
}
int b=0;
int temp;
int min;
for(i=0;i<n-1;i++){ //按作业到达系统时间进行排序,最早到达的排在最前面
if(job[i].starttime>job[i+1].starttime){ //把到达时间晚的赋值到min
min=job[i].starttime;
job[i].starttime=job[i+1].starttime;
job[i+1].starttime=min;
//把到达时间晚的赋值到min
min=job[i].needtime;
job[i].needtime=job[i+1].needtime;
job[i+1].needtime=min;
temp = job[i].id;
job[i].id = job[i+1].id;
job[i+1].id = temp;//在temp数组中排序
}
}
job[0].endtime=job[0].starttime+job[0].needtime;//结束时间=到达时间+服务时间
job[0].runtime=job[0].needtime;//周转时间=服务时间
job[0].dqzztime=job[0].runtime*1.0/job[0].needtime;//带权周转时间=周转时间/服务时间
for(i=1;i<n;i++){
if(job[i].starttime>job[i-1].endtime){ //第i个进程到达系统时,第i-1个进程已运行完毕
job[i].endtime=job[i].starttime+job[i].needtime;
job[i].runtime=job[i].needtime;
}else{
b=0;//要排序的作业的个数
if(job[i].starttime<job[i-1].endtime){
for(int j=i;j<n;j++){
if(job[j].starttime<job[i-1].endtime){
b=b+1;
}
}
for(int j=i;j<b-1+i;j++){
int mins=job[j].needtime;
int w=j;//最小的作业时间的标志
for(int z=j;z<b-1+i;z++){
if(mins>job[z+1].needtime){
mins=job[z+1].needtime;
w=z+1;
}
}
min=job[j].starttime;
job[j].starttime=job[w].starttime;
job[w].starttime=min;
min=job[j].needtime;
job[j].needtime=job[w].needtime;
job[w].needtime=min;
temp = job[j].id; //将第二个参数的值复制给第一个参数,返回第一个参数
job[j].id = job[w].id;
job[w].id = temp;
//按最短运行时间排序
}
}
job[i].endtime=job[i-1].endtime+job[i].needtime;
job[i].runtime=job[i].endtime-job[i].starttime;
}
job[i].dqzztime=job[i].runtime*1.0/job[i].needtime;
}
printf("作业名 到达时间 运行时间 完成时间 周转时间 带权周转时间\n");
for(i=0;i<n;i++)
{
printf(" %d\t %d\t %d\t %d\t %d %.2f\n",
job[i].id,job[i].starttime,job[i].needtime,job[i].endtime,job[i].runtime,job[i].dqzztime);
}
}
本文在https://blog.csdn.net/bxy0806/article/details/121211454的代码上优化修改
案例
结果