-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathJOB SEQUENCE.c
112 lines (110 loc) · 2.16 KB
/
JOB SEQUENCE.c
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
#include <stdio.h>
#include <stdlib.h>
void swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
int partition(int profit[],int deadlines[],int lb,int ub)
{
int l=lb;
int r=ub;
int pivot=profit[lb];
while(l<r)
{
while(profit[l] >= pivot)
{
l++;
}
while(profit[r] < pivot)
{
r--;
}
if(l<r)
{
swap(&deadlines[l],&deadlines[r]);
swap(&profit[l],&profit[r]);
}
}
swap(&deadlines[lb],&deadlines[r]);
swap(&profit[lb],&profit[r]);
return r;
}
int quick_sort(int profit[],int deadlines[],int lb,int ub)
{
if(lb<ub)
{
int loc=partition(profit,deadlines,lb,ub);
quick_sort(profit,deadlines,lb,loc-1);
quick_sort(profit,deadlines,loc+1,ub);
}
return 0;
}
int main()
{
int n=5;
int max=0;
int profit[]={1,5,10,15,20};
int deadlines[]={3,3,1,2,2};
for(int i=0;i<n;i++)
{
if(deadlines[i] >= max)
{
max=deadlines[i];
}
}
int slot[max];
for(int i=0;i<max;i++)
{
slot[i]=0;
}
printf("PROFIT = ");
for(int i=0;i<n;i++)
{
printf("%d ",profit[i]);
}
printf("\nDEADLINES = ");
for(int i=0;i<n;i++)
{
printf("%d ",deadlines[i]);
}
printf("\n\n");
quick_sort(profit,deadlines,0,n-1);
printf("\nPROFIT = ");
for(int i=0;i<n;i++)
{
printf("%d ",profit[i]);
}
printf("\nDEADLINES = ");
for(int i=0;i<n;i++)
{
printf("%d ",deadlines[i]);
}
for(int i=0;i<n;i++)
{
if(slot[deadlines[i]-1] == 0)
{
slot[deadlines[i]-1] = profit[i];
}
else
{
for(int j=deadlines[i]-1;j>=0;j--)
{
if(slot[j] == 0)
{
slot[j] = profit[i];
}
}
}
}
int s=0;
printf("\nJOB PROFIT SEQUENCE\n");
for(int i=0;i<max;i++)
{
s=s+slot[i];
printf(" %d ",slot[i]);
}
printf("\nMAXIMUM PROFIT = %d\n",s);
return 0;
}