《算法导论》习题2.3-7

代码如下:

 1 public class MergeSort {
 2     
 3     public static void sort(int [] A,int p, int r)
 4     {   
 5         if(p<r)
 6         {
 7             int q = (int) Math.floor( (p+r)/2 );
 8             sort(A,p,q);
 9             sort(A,q+1,r);
10             merge(A,p,q,r);
11         }
12         return ;
13 
14     }
15     public static void merge(int [] A, int p, int q, int r)
16     {
17         int n1 = q-p+1;
18         int n2 = r-q;
19         int [] L = new int[n1];
20         int [] R = new int[n2];
21         for(int i=0; i<n1; i++)
22           L[i] = A[p+i];
23         for(int i=0; i<n2;i++)
24             R[i]=A[q+i+1];
25         
26         int i=0;
27         int j=0;
28         int counter = p;
29         while(i<L.length && j<R.length)
30         {
31             if(L[i]<=R[j])
32             {
33                 A[counter]=L[i];
34                 i++;
35             }
36             else
37             {
38                 A[counter]=R[j];
39                 j++;
40             }
41             counter++;
42         }
43         if(i==L.length)
44         {
45             for(int k=j;k<R.length;k++)
46                 A[counter++] = R[k];
47         }
48         else
49         {
50             for(int k=i;k<L.length;k++)
51                 A[counter++] = L[k];
52         }    
53     }
54 }

 

 1 public class SumTwoEqual {
 2 
 3     /**
 4      * @param args
 5      */
 6     public static boolean TestExists(int A[],int X)
 7     {
 8         MergeSort.sort(A, 0, A.length - 1 );
 9         int i = 0;
10         int j = A.length-1;
11         while(i<j)
12         {
13             if(A[i]+A[j]==X)
14                 return true;
15             else if(A[i]+A[j] > X)
16                 j--;
17             else 
18                 i++;
19         }
20         return false;
21     }
22 
23     public static void main(String[] args) {
24         int A[] = {1,2,5,7,9,14,25,35,13,15};
25         boolean a = TestExists(A,22);
26         System.out.println(a);
27     }
28 }
算法思想很简单,就是先排序,然后从两边往中间找。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。