#include <stdio.h>
#include <stdlib.h>
// 进程结构体
typedef struct {
int pid;
int arrival_time;
int burst_time;
int start_time;
int finish_time;
int turnaround_time;
float normalized_turnaround_time;
} Process;
// 按照到达时间对进程进行排序
int compareArrivalTime(const void *a, const void *b) {
return ((Process*)a)->arrival_time - ((Process*)b)->arrival_time;
}
void first(Process processes[], int n) {
qsort(processes, n, sizeof(Process), compareArrivalTime);
int currentTime = 0;
int totalTurnaroundTime = 0;
printf("序号 到达时刻 服务时间 开始执行时间 完成时间 周转时间 带权周转时间\n");
for (int i = 0; i < n; i++) {
if (currentTime < processes[i].arrival_time) {
currentTime = processes[i].arrival_time; //查当前时间是否小于当前进程的到达时间,
//如果是,则将当前时间更新为当前进程的到达时间,以保证按序执行进程。
}
int startTime = currentTime;
int endTime = startTime + processes[i].burst_time;
int turnaroundTime = endTime - processes[i].arrival_time;
float normalizedTurnaroundTime = (float)turnaroundTime / processes[i].burst_time;
printf("%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%0.2f\n", processes[i].pid, processes[i].arrival_time, processes[i].burst_time, startTime, endTime, turnaroundTime, normalizedTurnaroundTime);
totalTurnaroundTime += turnaroundTime;
currentTime = endTime;
}
printf("平均周转时间:%0.2f\n", (float)totalTurnaroundTime / n);
}
int main() {
// 创建进程示例
Process processes[] = {
{1, 0, 3, 0, 0, 0, 0},
{2, 2, 6, 0, 0, 0, 0},
{3, 4, 4, 0, 0, 0, 0},
{4, 6, 5, 0, 0, 0, 0},
{5, 8, 2, 0, 0, 0, 0}
};
int n = sizeof(processes) / sizeof(Process);
// 执行短作业优先调度算法
first(processes, n);
return 0;
}