在方法中调用方法?这在这种情况下如何工作? (JAVA)

时间:2013-01-08 02:28:38

标签: java sorting methods mergesort

这是一个使用合并排序的程序 - 对1到1000个1000个数字的列表进行排序。 它显示原始列表,然后调用递归方法对其进行排序,然后显示它。

我在代码中不理解的是这两行:

  

MergeSort(数字,低,中); //在方法中它会说“HERE”

     

MergeSort(数字,中间+ 1,高);

我是java的初学者,这违背了我所学到的一切,因为我无法理解如何在方法中调用方法。除非它是我怀疑的对象。 有人可以解释一下这两行代码的作用吗?

import java.io.*;
import java.util.*;
import java.text.*;

public class MergeSortExample
{
    static final int Max = 1000;

    static void MergeSort (int[] numbers, int lo, int n) // recursive method
    {

        int low = lo; // 0
        int high = n; // 999

        if (low >= high) // return case;
        {
            return;
        }

        int middle = (low + high) / 2;
        MergeSort (numbers, low, middle); // HERE
        MergeSort (numbers, middle + 1, high); // HERE

        int end_low = middle;
        int start_high = middle + 1;

        while ((lo <= end_low) && (start_high <= high))
        {
            if (numbers [low] < numbers [start_high])
            {
                low++;
            }
            else
            {
                int Temp = numbers [start_high];

                for (int k = start_high - 1 ; k >= low ; k--)
                {
                    numbers [k + 1] = numbers [k];
                }
                numbers [low] = Temp;
                low++;
                end_low++;
                start_high++;
            }
        }




    }


    public static void main (String str[]) throws IOException
    {
        BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in));
        DecimalFormat df = new DecimalFormat ("#");
        BufferedReader reader = new BufferedReader (new FileReader ("unsorted.txt"));
        //BufferedWriter writer = new BufferedWriter (new FileWriter ("test.txt", true)); // text to write


        int[] numbers = new int [Max];  // if its int the 0's in the beginiing would be cut off
        String line = null;
        int[] count = {0};

        int low = 0;
        int high = count [0] - 1;


        while ((line = reader.readLine ()) != null)
        {
            numbers [count [0]] = Integer.parseInt (line);
            System.out.println (numbers [count [0]]);

            count [0]++;
        }
        reader.close ();
        System.out.println ();
        System.out.println ("There are " + count [0] + " numbers.");
        System.out.println ();


        ///////////////////////////////////////////////////////////////////////////////


        MergeSort (numbers, 0, count [0] - 1);

        for (int i = 0 ; i < count [0] ; i++)
        {
            System.out.println (numbers [i]);
        }




    }
}

3 个答案:

答案 0 :(得分:1)

这是基本的递归。合并排序的工作原理是将列表拆分为两部分,合并排序每个部分,然后将两个列表合并在一起。您要问的部分是合并对这两部分进行分类的部分。

答案 1 :(得分:1)

它是静态方法MergeSort()的递归调用。这里使用不良约定。方法名称应以小写字母

开头

答案 2 :(得分:0)

当然,方法可以调用另一种方法。这里唯一令人困惑的部分是此方法是静态,这意味着它是在而不是对象上调用的。由于它是在类的内部调用的,因此您不需要编写MergeSortExample.MergeSort()。如果您想了解静态和实例方法和字段之间的差异,我建议您查看Java网站上的tutorials

相关问题