-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmerge_sort.c
60 lines (53 loc) · 1.01 KB
/
merge_sort.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
#include<stdio.h>
int merge(int A[], int p ,int r ,int q){
int B[q-p+1],i;
int a = 0;
int b = 0;
for ( i = 0; i<q-p+1 ; i++)
{
if(a<(r-p+1) && b<(q-r))
{
if (A[p+a] < A[r+1+b])
{
B[i] = A[p+a];
a++;
}else
{
B[i] = A[r+1+b];
b++;
}
}
else if (a >= (r-p+1) && b<(q-r))
{
B[i] = A[r+1+b];
b++;
}else if (b >= q-r && a<(r-p+1))
{
B[i] = A[p+a];
a++;
}
}
for ( i = 0; i < q-p+1; i++)
{
A[p+i] = B[i];
}
}
int mergeSort(int A[], int p ,int q){
int r = (p+q)/2;
if(p<q)
{
mergeSort(A,p,r);
mergeSort(A,r+1,q);
merge(A,p,r,q);
}
}
int main(){
int A[]={4,5,3,2,1,6,7,9,8,0} ;
int n = 10;
int i;
mergeSort(A,0,n-1);
for ( i = 0; i < n; i++)
{
printf("%d\n",A[i]);
}
}