Skip to content

Commit ffb6d3e

Browse files
authored
Merge pull request larissalages#23 from HirushaR/merge
merger sort
2 parents 3bdceca + 575533f commit ffb6d3e

File tree

1 file changed

+37
-58
lines changed

1 file changed

+37
-58
lines changed

classical_algorithms/mergesort.cpp

Lines changed: 37 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,41 @@
1-
void merge(int a[], int l, int m, int r)
2-
{
3-
int l1 = m - l + 1;
4-
int l2 = r - m;
5-
6-
int temp1[l1];
7-
int temp2[l2];
8-
9-
for (int i = 0; i < l1; i++)
10-
{
11-
temp1[i] = a[l + i];
12-
}
13-
for (int j = 0; j < l2; j++)
14-
{
15-
temp2[j] = a[m + j + 1];
16-
}
17-
int i = 0;
18-
int j = 0;
19-
int k = l;
20-
21-
while (i < l1 && j < l2)
22-
{
23-
if (temp1[i] < temp2[j])
24-
{
25-
a[k] = temp1[i];
26-
i++;
27-
}
28-
29-
else
30-
{
31-
a[k] = temp2[j];
32-
j++;
33-
}
34-
35-
while (i < l1)
36-
{
37-
a[k] = temp1[i];
38-
i++;
39-
k++;
40-
}
41-
42-
while (j < l2)
43-
{
44-
a[k] = temp2[j];
45-
j++;
46-
k++;
47-
}
48-
}
49-
}
1+
void msort(int d[],int size){
502

51-
void mergesort(int a[], int l, int r)
52-
{
53-
if (l < r)
54-
{
55-
int m = r + (l - r) / 2;
3+
int i,j,k, result[size], mid=size/2;
4+
5+
if(size==1)
6+
{
7+
return;
8+
}
9+
10+
11+
msort(d,mid);
12+
13+
msort(&d[mid],size-mid);
5614

57-
mergesort(a, l, m);
58-
mergesort(a, m + 1, r);
15+
for(k=0,i=0,j=mid; i<mid && j<size; k++)
16+
result[k]=d[i]<d[j]?d[i++]:d[j++];
5917

60-
merge(a, l, m, r);
61-
}
18+
while(i<mid)
19+
result[k++]=d[i++];
20+
while(j<size)
21+
result[k++]=d[j++];
22+
23+
for(k=0;k<size;k++)
24+
{
25+
d[k]=result[k];
26+
}
27+
28+
}
29+
30+
31+
int main()
32+
{
33+
int arr[7] = {5,3,7,2,1,6,4};
34+
msort(arr,7);
35+
int i;
36+
37+
for( i = 0 ; i<7 ; i++)
38+
printf("%d ", arr[i]);
39+
printf("\n");
40+
return 0;
6241
}

0 commit comments

Comments
 (0)