【合并两个有序的子数组】算法实现
【合并两个有序的子数组】
View Code
1 #include<iostream.h>
2 void merge(int array[],int p,int q,int r,int m);
3 void print(int array[],int n);
4 //void sort_merge();
5 void main()
6 {
7 int arr[15]=
8 {
9 2,1,3,14,25,
10 4,11,15,22,24,
11 6,10,17,20,30
12 };
13 merge(arr,1,4,9,9);
14 print(arr,15);
15 }
16 /****************************************************************
17 *输入:整数数组array[],下标p,q,r,元素个数m。array[p]~array[q]
18 * 及array[q+1]~array[r]已按递增顺序排序
19 *输出:按递增排序的子数组array[p]~array[r]
20 *****************************************************************/
21 void merge(int array[],int p,int q,int r,int m)
22 {
23 int* bp=new int[m];
24 int i,j,k;
25 i=p;j=q+1;k=0;
26 //逐一判断两子数组的元素,按两种情况,把小的元素复制到缓冲区
27 while(i<=q&&j<=r)
28 {
29 if(array[i]<=array[j])
30 {
31 bp[k++]=array[i++];
32 }
33 else
34 {
35 bp[k++]=array[j++];
36 }
37 }
38 //cout<<endl;
39 //按两种情况处理剩余元素
40 if(i==q+1)
41 {
42 //for(;j<=r;)
43 while(j<=r)
44 {
45 bp[k++]=array[j++];//把array[j]~array[r]复制到缓冲区
46 }
47 }
48 else
49 {
50 while(i<=q)
51 {
52 bp[k++]=array[i++];//把array[i]~array[q]复制到缓冲区
53 }
54
55 }
56
57 k=0;
58 i=p;
59 while(i<=r)
60 //for(i=p;i<=r;)//最后把数组bp的内容复制到array[p]~array[r]
61 {
62 array[i++]=bp[k++];
63 }
64
65 delete bp;
66 }
67 void print(int array[],int n)
68 {
69 for(int i=0;i<n;i++)
70 {
71 if(i%5==0&&i!=0)
72 {
73 cout<<"\n";
74 }
75 cout<<array[i]<<" ";
76 }
77 cout<<endl;
78 }
2 void merge(int array[],int p,int q,int r,int m);
3 void print(int array[],int n);
4 //void sort_merge();
5 void main()
6 {
7 int arr[15]=
8 {
9 2,1,3,14,25,
10 4,11,15,22,24,
11 6,10,17,20,30
12 };
13 merge(arr,1,4,9,9);
14 print(arr,15);
15 }
16 /****************************************************************
17 *输入:整数数组array[],下标p,q,r,元素个数m。array[p]~array[q]
18 * 及array[q+1]~array[r]已按递增顺序排序
19 *输出:按递增排序的子数组array[p]~array[r]
20 *****************************************************************/
21 void merge(int array[],int p,int q,int r,int m)
22 {
23 int* bp=new int[m];
24 int i,j,k;
25 i=p;j=q+1;k=0;
26 //逐一判断两子数组的元素,按两种情况,把小的元素复制到缓冲区
27 while(i<=q&&j<=r)
28 {
29 if(array[i]<=array[j])
30 {
31 bp[k++]=array[i++];
32 }
33 else
34 {
35 bp[k++]=array[j++];
36 }
37 }
38 //cout<<endl;
39 //按两种情况处理剩余元素
40 if(i==q+1)
41 {
42 //for(;j<=r;)
43 while(j<=r)
44 {
45 bp[k++]=array[j++];//把array[j]~array[r]复制到缓冲区
46 }
47 }
48 else
49 {
50 while(i<=q)
51 {
52 bp[k++]=array[i++];//把array[i]~array[q]复制到缓冲区
53 }
54
55 }
56
57 k=0;
58 i=p;
59 while(i<=r)
60 //for(i=p;i<=r;)//最后把数组bp的内容复制到array[p]~array[r]
61 {
62 array[i++]=bp[k++];
63 }
64
65 delete bp;
66 }
67 void print(int array[],int n)
68 {
69 for(int i=0;i<n;i++)
70 {
71 if(i%5==0&&i!=0)
72 {
73 cout<<"\n";
74 }
75 cout<<array[i]<<" ";
76 }
77 cout<<endl;
78 }
运行结果: