代码
#pragma warning(disable:4996)
#include <iostream>
#include<string>
using namespace std;
class SJF {
public:
string name;//程序名
int a_time;//到达时间
int r_time;//运行时间
int s_time;//开始时间
int f_time;//结束时间
}; SJF a[1000];
void sjf() {
int num, i, j, temp;
string t;
cout << "请输入进程个数 :";
cin >> num;
cout << "请输入" << num << "个进程到达时间和运行时间" << endl;
for (i = 0; i < num; i++) {
cin >> a[i].a_time;
cin>>a[i].r_time;
a[i].name=i+1;
}//随机生成到达时间和运行时间
cout << "进程名" << " " << "到达时间" << " " << "运行时间" << endl;
for (i = 0; i < num; i++) {
cout << a[i].name << "\t" << a[i].a_time << "\t" << a[i].r_time << endl;
}
for (i = 1; i < num; i++) { //按到达时间排序 升序
for (j = 0; j < num - i; j++) {
if (a[j].a_time > a[j + 1].a_time) {
t = a[j].name;
a[j].name = a[j + 1].name;
a[j + 1].name = t;
temp = a[j].a_time;
a[j].a_time = a[j + 1].a_time;
a[j + 1].a_time = temp;
temp = a[j].r_time;
a[j].r_time = a[j + 1].r_time;
a[j + 1].r_time = temp;
}
}
}
for (int i = 0;i < num-1;i++) {
for (int j = 0; j < num -1; j++) {
if (a[j].a_time == a[j + 1].a_time && a[j].r_time > a[j + 1].r_time) {
t = a[j].name;
a[j].name = a[j + 1].name;
a[j + 1].name = t;
temp = a[j].a_time;
a[j].a_time = a[j + 1].a_time;
a[j + 1].a_time = temp;
temp = a[j].r_time;
a[j].r_time = a[j + 1].r_time;
a[j + 1].r_time = temp;
}
}
}
cout << endl;
cout << "SJF算法" << endl;
cout << "进程名" << " " << "到达时间" << " " << "运行时间" << " " << "开始时间" << " " << "结束时间" << endl;
a[0].s_time = a[0].a_time ;//计算第一个进程的开始时间
a[0].f_time = a[0].a_time + a[0].r_time;//计算第一个进程的结束时间
for (i = 1; i < num; i++) {
for (j = i; j < num - 1; j++) {
for (int d = i + 1; d < num; d++) {
if ((a[i - 1].f_time >= a[j].a_time) && (a[i - 1].f_time >= a[d].a_time) && (a[j].r_time > a[d].r_time)) {
t = a[j].name;
a[j].name = a[j + 1].name;
a[j + 1].name = t;
temp = a[j].a_time;
a[j].a_time = a[j + 1].a_time;
a[j + 1].a_time = temp;
temp = a[j].r_time;
a[j].r_time = a[j + 1].r_time;
a[j + 1].r_time = temp;
}
}
}
if (a[i].a_time < a[i - 1].f_time) {//当前到达时间在上一个作业结束时间之前
a[i].f_time = a[i - 1].f_time + a[i].r_time;
a[i].s_time = a[i - 1].f_time ;
}
else {//之后
a[i].f_time = a[i].a_time + a[i].r_time;
a[i].s_time = a[i].a_time;
}
}
for (i = 0; i < num; i++) {
cout << a[i].name << "\t" << a[i].a_time << "\t" << a[i].r_time << "\t\t" << a[i].s_time << "\t" << a[i].f_time << "\t" << endl;
}
int s = 0;
for (i = 0;i < num;i++) {
s = s + a[i].f_time - a[i].a_time - a[i].r_time;
}
cout << "平均等待时间" << s / num << endl;
}//如果到达时间相同就运行时间短的放前边
int main()
{
sjf();
}