1

私はオンラインクラスを取っているので、先生や他のクラスメートからの助けはありません. 私たちの課題は、乱数の配列の最大値とインデックスを見つける必要があるということです。2 つの方法でそれを行う必要があります。通常のループ (ブルート フォース) と分割統治。分割統治では、配列を 2 つの小さな配列に分割し、両方の最大値を見つけてからマージする必要があります。

私はブルートフォースを働かせ、分割統治して最大値を見つけました。しかし、2つの小さな配列の最大値を取得して2つをマージできないようです。また、両方の方法で何回比較が行われたかを確認し、出力を出力する必要があります。

これが私がこれまでに持っているものです:

  public class MinMaxValues{  



 // Find maxiumum (largest) value in array using Divide and Conquer


 public static int findMax( int[]numbers, int left, int right )
 {
 int middle;
 int max_l, max_r, max_m;

 if ( left == right )    // Only one element...
 {  
    // Base case: solved easily...

    return numbers[left];
 }
 else
 {

    // Solve smaller problems

    middle = (left+right)/2;   // Divide into 2 halves

    max_l = findMax( numbers, left, middle);  
               // Find max in first half 

    max_r = findMax( numbers, middle+1, right);  
               // Find max in second half
      //System.out.println("Maximum Value = " + max_r);   
    max_m = max_l+ max_r;

    // Use the solutions to solve original problem

    if ( max_l > max_r )
       return(max_l);
    else
       return(max_r);
          //return(max_m);

  }
  }
  }
4

2 に答える 2

0

配列を返すことはありません。

また、配列に変更を加えません。

最大値を見つけたら、何らかの方法で配列を変更する必要があります。

メソッドでラップしてみてください。

   public static int[] maxSort(int[] array,int length){
   int[] sorted = new int[array.length];
   sorted[arrayLength]=findmax(array,0,sorted,arrayLength);//assumes find max returns                         maximum value of entire array.
   while(length>0){
   sorted=maxsort(array,length--);
   }
   return sorted;
   }

私はそれが正しい方向への一歩だと思うので、それが機能していると100%確信しているわけではありません.

于 2012-05-20T21:28:50.273 に答える
0

インデックスまたはそのインデックスの値を比較しているプログラム内のポイントに、より慎重に対処する必要があります。たとえば、 かどうかをチェックする代わりに、 かどうかをチェックするmax_l > max_rことを意味していると思いますnumbers[max_l] > numbers[max_r]

于 2012-05-20T23:16:28.177 に答える