-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path5merge.c
123 lines (120 loc) · 2.35 KB
/
5merge.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
113
114
115
116
117
118
119
120
121
122
123
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define x 10
#define y 100
#define incre 10
void arrange(int a[],int n)
{
if(n == 1 || n == 2)
{
return;
}
int i,temp;
for(i = 1;i < n-1;i++)
{
temp = a[i];
a[i] = a[n-i];
a[n-i] = temp;
}
}
void merge(int a[],int b[],int c[],int m1,int m2,int *cnt)
{
int i = 0,j = 0,k = 0;
while(i < m1 && j < m2)
{
*cnt += 1;
if(b[i] <= c[j])
{
a[k] = b[i];
i++;
}
else
{
a[k] = c[j];
j++;
}
k++;
}
if(i == m1)
{
while(j < m2)
{
a[k] = c[j];
j++;k++;
}
}
else
{
while(i < m1)
{
a[k] = b[i];
i++;k++;
}
}
}
void mergesort(int a[],int n,int *cnt)
{
if(n > 1)
{
int m1,m2,i;
m1 = n/2;m2 = n - m1;
int b[m1],c[m2];
for(i = 0;i < m1;i++)
{
b[i] = a[i];
}
for(i = 0;i < m2;i++)
{
c[i] = a[i+m1];
}
mergesort(b,m1,cnt);
mergesort(c,m2,cnt);
merge(a,b,c,m1,m2,cnt);
}
}
void main()
{
system("del -f merge_*.txt");
int n,i,cnt = 0;
srand(time(NULL));
FILE *f1,*f2,*f3;
for(n = x;n <= y;n += 10)
{
int a1[n],a2[n],a3[n];
for(i = 0;i < n;i++)
{
a1[i] = i+n+1;
a2[i] = rand() % 1000;
}
int e = 2,o = 1,b[n/2];
for(i = 0;i < n/2;i++)
{
a3[i] = e;
e += 2;
b[i] = o;
o += 2;
}
arrange(a3,n/2);
arrange(b,n/2);
for(i = 0;i < n/2;i++)
{
a3[i+(n/2)] = b[i];
}
f1 = fopen("merge_best.txt","a");
cnt = 0;
mergesort(a1,n,&cnt);
fprintf(f1,"%d\t%d\n",n,cnt);
fclose(f1);
f2 = fopen("merge_avg.txt","a");
cnt = 0;
mergesort(a2,n,&cnt);
fprintf(f2,"%d\t%d\n",n,cnt);
fclose(f2);
f3 = fopen("merge_worst.txt","a");
cnt = 0;
mergesort(a3,n,&cnt);
fprintf(f3,"%d\t%d\n",n,cnt);
fclose(f3);
}
}