-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathactivity.c
61 lines (50 loc) · 1.28 KB
/
activity.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
#include <stdio.h>
typedef struct activity
{
int id;
int s;
int f;
}activity;
#define N 6
void sort(activity a[]);
void activity_selection(activity activities[]);
int main(int argc, char const *argv[])
{
activity activities[N] = {{1,4,8},{2,1,6},{3,0,3},{4,3,5},{5,8,11},{6,5,8}};
activity_selection(activities);
return 0;
}
void activity_selection(activity activities[]){
int k = 0;
// sort by finish time
sort(activities);
// atleast first activity can be selected
printf("Selected Activities :\n");
printf("Activity %d, Start : %d Finish : %d\n",activities[0].id,activities[0].s,activities[0].f);
for (int i = k+1; i < N; i++)
{
if(activities[i].s >= activities[k].f){
k = i;
printf("Activity %d, Start : %d Finish : %d\n",activities[i].id,activities[i].s,activities[i].f);
}
}
}
void sort(activity a[]){
int gap;
int pos;
activity temp;
for (gap = N / 2; gap > 0; gap /= 2)
{
for (int i = gap; i < N; i++)
{
pos = i;
temp = a[i];
while (a[pos - gap].f > temp.f && pos >= gap)
{
a[pos] = a[pos - gap];
pos -= gap;
}
a[pos] = temp;
}
}
}