【问题标题】:java mergesort count homeworkjava 归并排序计数作业
【发布时间】:2013-05-07 18:33:28
【问题描述】:

我正在努力在合并排序时获取比较和移动器的计数。由于Sort Comparisons Counter,我想我有我需要的递归,但我无法打印出来。我显然对编程很陌生,所以如果您能解释我缺少什么,我将不胜感激。

import java.util.Arrays;


public class MergeSort {
int count = 0;
/**
 * @param args
 */

// Rearranges the elements of a into sorted order using
// the merge sort algorithm (recursive).
public int mergeSort(int[] a, int howMany) {


    if (a.length >= 2) {
        // split array into two halves
        int[] left  = Arrays.copyOfRange(a, 0, a.length/2);
        int[] right = Arrays.copyOfRange(a, a.length/2, a.length);


        // sort the two halves
       howMany = mergeSort(left,howMany);
       howMany = mergeSort(right, howMany);

        // merge the sorted halves into a sorted whole
       howMany = merge ( left, right, a, howMany);


    }

   return howMany;
}




// Merges the left/right elements into a sorted result.
// Precondition: left/right are sorted
public static int merge(int[] result, int[] left, 
                                       int[] right, int howMany) {
    int i1 = 0;   // index into left array
    int i2 = 0;   // index into right array

    for (int i = 0; i < result.length; i++) {
        if (i2 >= right.length ||
           (i1 < left.length && left[i1] <= right[i2])) {
            result[i] = left[i1];    // take from left
            i1++;
        } else {
            result[i] = right[i2];   // take from right
            i2++;
        }

    }

    return howMany;
}

System.out.println(howMany); // ???
}

【问题讨论】:

  • public static void main(String []args){ System.out.println(callYouMethodHere(foo,bar)); }
  • 在整个过程中再添加一些 System.out.println 语句,以查看您的代码是否按您认为的那样工作。
  • 方法的调用顺序是什么?通常 main 方法将首先被调用,但我认为你正在做相反的事情。并且 System.out.println 在 return 语句之后,它不会以任何方式执行

标签: java mergesort


【解决方案1】:

您需要通过它的对象调用该方法,无论您想在哪里打印。像这样的东西(可能在你的主要方法中):

MergeSort mObj - new MergeSort();
int[] array = {1,2,3};
int count =  mObj.mergeSort(array, 2);
System.out.println(count);

【讨论】:

    【解决方案2】:

    基本上,您需要一个驱动程序方法。当一个java类运行时,它会寻找一个public static void main(String[] args)方法;如果这个方法不存在,什么都不会发生。有了你现在所拥有的,你实际上应该从System.out.println(howMany); 得到一个编译错误,因为变量howMany 只存在于合并方法的范围(括号)内。为了更好地理解这一点,我会查看您关于变量和方法范围以及类成员的注释。为了快速修复,删除我上面提到的底部的行,并将这个方法放在你的类中的某个地方:

    public static void main(String[] args) {
        int[] array = {2,5,8,1,3};
        int howMany = mergeSort(array, 5);
        System.out.println(howMany);
    }
    

    你还需要让你的mergeSort方法static,所以把它的定义改成

    public **static** int mergeSort(int[] a, int howMany)

    我测试了你的代码,我很确定它没有给出你想要的答案,所以一定要检查一下。祝学习面向对象编程好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多