-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpriority_non_algo.h
116 lines (85 loc) · 2.93 KB
/
priority_non_algo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#ifndef PRIORITY_NON_ALGO_H
#define PRIORITY_NON_ALGO_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QStringList"
#include "QTableWidget"
#include "QMessageBox"
#include "QMap"
#include <iostream>
#include "QVector"
using namespace std;
float average_time = 0;
struct priority {
QString processName;
int arrivalTime , burstTime ,Priority;
};
bool compareArrival(priority a, priority b)
{
// If total marks are not same then
// returns true for higher total
if (a.arrivalTime != b.arrivalTime )
return a.arrivalTime > b.arrivalTime;
return (a.arrivalTime > b.arrivalTime);
}
bool comparePriority(priority a, priority b)
{
// If total marks are not same then
// returns true for higher total
if (a.Priority != b.Priority )
return a.Priority < b.Priority;
return (a.Priority < b.Priority);
}
QVector<QPair<QString ,QPair<int,int>>> priority_non_Algo(QVector<priority> &v)
{
QVector<QPair<QString ,QPair<int,int>>> res;
sort(v.rbegin(), v.rend(), compareArrival); // sort elements according to arrival time
// at first check if some elements have the same arrival time , sort them according to priority
int element = v[0].arrivalTime;
int idx = 0;
for (int i=1; i<v.size(); i++)
{
if(v[i].arrivalTime != element){
idx = i;
break;
}
}
sort(v.begin(),v.begin()+idx , comparePriority);
//------------------
int finishTime = v[0].arrivalTime + v[0].burstTime;
QPair<int,int> time = {v[0].arrivalTime,finishTime};
QPair<QString ,QPair<int,int>> p = {v[0].processName ,time};
res.append(p);
int index =0;
//to calculate the total waiting time = departure -arrival - burst
int sum = finishTime - v[0].arrivalTime -v[0].burstTime;
for (int i=1; i<v.size()-1; i++)
{
int j = i+1 , flag = 0;
for (j= i+1; j<v.size(); j++) {
if(finishTime <= v[i].arrivalTime)
{
flag =1;
index = j-1;
break;
}
}
if(flag)sort(v.begin()+ i , v.begin()+idx , comparePriority);
else sort(v.begin()+ i , v.end() , comparePriority);
QPair<int,int> time = {finishTime,finishTime+v[i].burstTime};
finishTime += v[i].burstTime;
QPair<QString ,QPair<int,int>> p = {v[i].processName ,time};
res.append(p);
sum += finishTime - v[i].arrivalTime -v[i].burstTime;
}
//adding the last element bec itsnot coverdd
int pos = v.size()-1;
time = {finishTime,finishTime+v[pos].burstTime};
finishTime += v[pos].burstTime;
p = {v[pos].processName ,time};
res.append(p);
sum += finishTime - v[pos].arrivalTime -v[pos].burstTime;
average_time = float(sum)/float(v.size());
return res;
}
#endif // PRIORITY_NON_ALGO_H