int* divide(int *data,int size)
4 {
5 int *left =NULL,*right=NULL;
6 int *des = NULL;
7 int i ,j,z= 0;
8 if (size == 1)
9 return data;
10 int j_n = size/2;
11 left = divide(data,j_n);
12 right = divide(data+j_n,size-j_n);
13 des = (int*)malloc(size*sizeof(int)*2);
14 for (i = 0,j=0; i<j_n && j < size-j_n;)
15 {
16 if (left[i] < right[j])
17 {
18 des[z] = left[i];
19 z++;
20 i++;
}
22 else
23 {
24 des[z]=right[j];
25 z++;
26 j++;
27 }
28 }
29 if (i == j_n)
30 {
31 memcpy(des+z,right+j,(size-j_n-j)*4);
32 }
33 if (j == size - j_n)
34 {
35 memcpy(des+z,left+i,(j_n-i)*4);
36 }
37 return des;
38 }
39
40
41 #define LEN 10
42 int main()
43 {
44 int buf[10]={123,432,4124,2351,1,1,1,5,42,10};
45 int buf1[LEN] = {4,1,2,5 ,9};
46 int *des=NULL;
4 {
5 int *left =NULL,*right=NULL;
6 int *des = NULL;
7 int i ,j,z= 0;
8 if (size == 1)
9 return data;
10 int j_n = size/2;
11 left = divide(data,j_n);
12 right = divide(data+j_n,size-j_n);
13 des = (int*)malloc(size*sizeof(int)*2);
14 for (i = 0,j=0; i<j_n && j < size-j_n;)
15 {
16 if (left[i] < right[j])
17 {
18 des[z] = left[i];
19 z++;
20 i++;
}
22 else
23 {
24 des[z]=right[j];
25 z++;
26 j++;
27 }
28 }
29 if (i == j_n)
30 {
31 memcpy(des+z,right+j,(size-j_n-j)*4);
32 }
33 if (j == size - j_n)
34 {
35 memcpy(des+z,left+i,(j_n-i)*4);
36 }
37 return des;
38 }
39
40
41 #define LEN 10
42 int main()
43 {
44 int buf[10]={123,432,4124,2351,1,1,1,5,42,10};
45 int buf1[LEN] = {4,1,2,5 ,9};
46 int *des=NULL;
47 des = divide(buf,LEN);