Process temp; for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (p[i].serve_time > p[j].serve_time) { temp = p[i]; p[i] = p[j]; p[j] = temp; } //顺序执行排序后的进程 (到达时间) int time = 0;//表示当前时间 for (int i = 0; i < n; i++) { if (i == 0) //第一个进程开始执行 { p[i].start_time = p[i].arrive_time; //启动时间等于到达时间 time = p[i].finish_time = p[i].start_time + p[i].serve_time;//运行完后的时间 } else //其他进程按顺序执行 { if (time >= p[i].arrive_time) //如果进程已到达立即执行进程 { p[i].start_time = time; //启动时间等于当前时间 time=p[i].finish_time = p[i].start_time + p[i].serve_time; } else //如果没到打等待进程到达,进程的启动时间就是进程的到达时间 { p[i].start_time = p[i].arrive_time; p[i].finish_time = p[i].start_time + p[i].serve_time; time = p[i].finish_time; } } }
时间: 2024-02-15 21:27:43 浏览: 117
这段代码是一个简单的短作业优先(SJF)调度算法。它首先对进程按照服务时间进行排序,然后按照排序后的顺序执行每个进程。其中,n代表进程的数量,p是一个结构体数组,存储了每个进程的到达时间、服务时间、启动时间和完成时间。算法首先对进程按照服务时间进行排序,然后依次执行每个进程。如果当前进程已经到达,则立即执行该进程,启动时间为当前时间。否则,进程需要等待到达,启动时间为进程的到达时间。每个进程的完成时间是启动时间加上服务时间。最终,该算法返回的是每个进程的启动时间和完成时间。
相关问题
Process temp; for (int i = 0; i < n - 1; i++) for (int j = i + 1; j < n; j++) if (p[i].serve_time > p[j].serve_time) { temp = p[i]; p[i] = p[j]; p[j] = temp; }
这段代码是什么意思?
这段代码是一个简单的排序算法,使用的是冒泡排序。它的目的是按照任务的服务时间对任务进行排序。代码中使用了一个结构体数组p,每个元素表示一个任务,其中包含了任务的服务时间。通过嵌套的for循环,遍历所有的任务,如果当前任务的服务时间比后面的任务的服务时间大,就交换它们的位置。这么做的目的是让服务时间短的任务尽可能早地得到执行,以最小化任务的平均等待时间。
怎么改进 for(int i=0; i<n; i++) { cout << "作业" << sort_queue[i].name << "-->"; } cout << "over"; cout << "进程完成后具体信息记录:" << endl; cout << "进程\t到达时间\t服务时间\t周转时间\t" << endl; for(int i=0; i<n; i++) { out(temp[i]); ave_aroundtime += temp[i].aroundtime; ave_weight_aroundtime += temp[i].weight_aroundtime; } ave_aroundtime/=n; ave_weight_aroundtime/=n;
可以将输出部分的代码封装成一个函数,以提高代码的可读性和模块化程度。同时,在输出时可以使用格式化输出来使输出更加美观。
例如,可以定义一个名为print_jobs_info的函数,用于输出作业信息和进程完成后的具体信息记录。函数的参数为作业队列sort_queue和已完成的进程信息数组temp。
在函数内部,可以先输出作业队列的信息,然后再输出进程完成后的具体信息记录。具体信息记录的输出可以使用格式化输出,使得每个字段的输出对齐,更加美观。最后,在函数中计算平均周转时间和加权平均周转时间。
修改后的代码如下:
```
void print_jobs_info(const vector<Job>& sort_queue, const vector<Process>& temp)
{
cout << "作业队列:" << endl;
for (int i = 0; i < sort_queue.size(); i++) {
cout << "作业" << sort_queue[i].name << "-->";
}
cout << "over" << endl;
cout << "进程完成后具体信息记录:" << endl;
cout << left << setw(8) << "进程" << setw(12) << "到达时间" << setw(12) << "服务时间" << setw(12) << "周转时间" << endl;
for (int i = 0; i < temp.size(); i++) {
out(temp[i]);
ave_aroundtime += temp[i].aroundtime;
ave_weight_aroundtime += temp[i].weight_aroundtime;
}
ave_aroundtime /= temp.size();
ave_weight_aroundtime /= temp.size();
}
```
阅读全文