【合并两个有序的子数组】算法实现

 

【合并两个有序的子数组】
 
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 }

 运行结果:

posted on 2011-03-30 16:30  COS  阅读(487)  评论(0编辑  收藏  举报