代码实现的算法有三种,第一种是短作业优先(Short Job First)算法,第二种是先来先服务(First Come First Served)算法,第三种是高响应比优先调度(Highest Response Ration Next)算法。最下方会有代码结果截图。
代码如下,
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string>
#include<iostream>
#include<time.h>
#include<Windows.h>
using namespace std;
#define MAX_SIZE 6
struct Job {
int id;
double run_time;
double arrive_time;//ms
double wait_time;//ms
double level;
string state;//{ "ready","running","finished" };
};
Job job[MAX_SIZE];
Job queue[MAX_SIZE];
Job queue1[MAX_SIZE];
Job temp;
int n;
void CreateJob();
void FCFServed();
void ShortJobFirst();
void HRRN();
void Print();
int main() {
cin >> n;
CreateJob();
Print();
//FCFServed();
//ShortJobFirst();
HRRN();
system("pause");
//return 0;
}
void Print() {
for (int i = 0; i < n; i++) {
cout << "ID" << " " << "RUNTIME" << " " << "ARRIVINGTIME" << endl;
cout << job[i].id << " ";
cout << job[i].run_time << " ";
cout << job[i].arrive_time << endl;
}
cout << endl;
}
void CreateJob() {
for (int i = 0; i < MAX_SIZE; i++) {
job[i].id = -1;
}
for (int i = 0; i < MAX_SIZE; i++) {
queue[i].id = -1;
}//INIT
for (int i = 0; i < MAX_SIZE; i++) {
queue1[i].id = -1;
}//INIT
for (int i = 0; i < n; i++) {
job[i].id = i;
cin >> job[i].run_time >> job[i].arrive_time;
job[i].state = "";
}
for (int i = 0; i < n; i++) {//冒泡
for (int j = 0; j <n - i - 1; j++) {
if (job[j].arrive_time > job[j + 1].arrive_time) {
temp.id = job[j].id;
temp.arrive_time = job[j].arrive_time;
temp.run_time = job[j].run_time;
job[j].id = job[j + 1].id;
job[j].arrive_time = job[j + 1].arrive_time;
job[j].run_time = job[j + 1].run_time;
job[j + 1].id = temp.id;
job[j + 1].arrive_time = temp.arrive_time;
job[j + 1].run_time = temp.run_time;
}
}
}
}
void FCFServed() {
int p = 0, p1 = 0;
double starttime = 0;
double finishtime = 0;
cout << "Starting the FCFS..." << endl;
cout << endl;
cout << "JobId " << "arrive_time " << "run_time " << "start_time " <<