结构体自定义排序函数,调用stdlib.h库的系统快速排序qsort
1 //sjf non-preemptive with same arrival time 2 3 #include<stdio.h> 4 #include<stdlib.h> 5 #define N 5010 6 7 struct process { 8 int pid; 9 int bt; 10 int wt; 11 int tat; 12 }; 13 14 int cmp(const void* a, const void* b) { 15 struct process c = *(struct process*)a; 16 struct process d = *(struct process*)b; 17 return c.bt < d.bt ? 0 : 1; 18 } 19 20 void main() { 21 puts("Enter total number of processes"); 22 int n; 23 scanf("%d", &n); 24 puts("Enter process-id and burst-time for each process "); 25 struct process p[N]; 26 for (int i = 0; i < n; i++) scanf("%d%d", &p[i].pid, &p[i].bt); 27 puts("Processes after SJF scheduling... "); 28 qsort(p, n, sizeof(p[0]), cmp); 29 p[0].wt = 0; 30 for (int i = 1; i < n; i++) p[i].wt += p[i - 1].bt + p[i - 1].wt; 31 for (int i = 0; i < n; i++) p[i].tat = p[i].bt + p[i].wt; 32 for (int i = 0; i < n; i++) { 33 printf("Process %d ", p[i].pid); 34 printf("- burst time = %d, waiting time = %d, turnaround time = %d ", p[i].bt, p[i].wt, p[i].tat); 35 } 36 int twt = 0, ttat = p[0].bt; 37 for (int i = 1; i < n; i++) { 38 twt = twt + p[i].wt; 39 ttat = ttat + p[i].tat; 40 } 41 float awt = (float)twt / n; 42 float atat = (float)ttat / n; 43 printf("Average waiting time = %4.2f ", awt); 44 printf("Average turnaround time = %4.2f ", atat); 45 }