短作业优先算法(非剥夺)

短作业优先算法(非剥夺)

代码是用C加加写的
需要先建立一个Win32 Console Application工程,在其中建一个C++的文件
使用的是冒泡法对到达时间进行从小到大排序

源代码

#include “stdio.h”
#define N 20
int ct;//当前时间
struct process
{
int no;//序号
int arrtime;//到达时间
int runtime;//运行时间
int starttime;//开始时间
int endtime;//结束时间
int roundtime;//周转时间
int flag;//标志位 初值为 运行结束为1,2,3
};
void bubblesort(process a[],int n)//对到达时间进行从小到大排序
{
int i,k;
process t;
for(i=0;i for(k=0;k {
if(a[k].arrtime>a[k+1].arrtime)
{
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
}ct=a[0].arrtime;
}
void bubblesort2(process a[],int n)//对执行顺序进行从小到大排序号
{
int i,k;
process t;
for(i=0;i for(k=0;k {
if(a[k].flag>a[k+1].flag)
{
t=a[k];
a[k]=a[k+1];
a[k+1]=t;

}
}

ct=a[0].arrtime;
}
int findS(process a[],int n)//查找要调度的作业的下标值
{
int k=0;//记录要调度作业的下标,赋给k;
int rt=65535;
for(int i=0;i if(a[i].flag==0&&a[i].arrtime<=ct&&a[i].runtime {
rt=a[i].runtime;
k=i;
}
if(ct ct=a[k].arrtime;
return k;
}

void SJF(process a[],int n)//短作业优先调度算法的实现
{
int k;
bubblesort(a,n);
for(int i=1;i {
k=findS(a,n);
a[k].flag=i;
a[k].starttime=ct;
a[k].endtime=ct+a[k].runtime;
a[k].roundtime=a[k].endtime-a[k].arrtime;
ct=a[k].endtime;
}
}

void printarray(process a[],int n)
{
int i;
printf(“作业号\t到达时间\t执行时间\t开始时间\t结束时间\t周转时间\n”);
for(i=0;i {
printf("%d\t %d\t\t %d\t\t %d\t\t %d\t\t %d\n",a[i].no,a[i].arrtime,a[i].runtime,a[i].starttime,a[i].endtime,a[i].roundtime);
}
}
void main()
{
process a[N]={0};
int n;//实际运行的进程个数
printf(“请输入作业:”);
scanf("%d",&n);
for(int i=0;i {
printf(“作业号…”);
scanf("%d%d%d",&a[i].no,&a[i].arrtime,&a[i].runtime);
}
SJF(a,n);
bubblesort2(a,n);
printarray(a,n);
}
#运行
短作业优先算法(非剥夺)_第1张图片
#本人是根据老师讲的列题,分享自己的作业,如有侵权,非常抱歉,请联系我,马上会删。

你可能感兴趣的:(c语言,算法)