繁体   English   中英

将数组分成两半,找到两个最大值,然后合并两个值

[英]Split an array in half and find the two Max values and then merge the two values

我正在上在线课程,所以老师或其他同学没有任何帮助。 我们的任务是,我们需要找到随机数数组的最大值和索引。 我们需要以两种方式做到这一点。 正常循环(强力)并分而治之。 在分而治之中,我们需要将数组拆分为两个较小的数组,找到两者的最大值,然后合并。

我得到了蛮力工作,也得到了分而治之,找到了最大值。 但是我似乎无法获得两个较小数组的最大值并合并两个数组。 我们还需要检查两种方法进行了多少次比较,然后输出输出。

这是我到目前为止的内容:

  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);

  }
  }
  }

您永远不会返回数组。

另外,您无需对数组进行任何更改。

找到最大值后,您必须以某种方式更改数组。

尝试用一种方法包装它。

   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%肯定它能正常工作。

您需要更仔细地在程序中比较索引或该索引值的地址。 例如,我相信不是要检查max_l > max_r是否是要检查numbers[max_l] > numbers[max_r]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM