java - 合并排序字符串方法java

标签 java static-methods mergesort

我需要有关对字符串数组使用归并排序的帮助。我已经看到很多关于 int 数组的例子,但我需要帮助使用字符串数组。我只能使用 .compareTo() 方法。这是我的主要方法:

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);

    String[] nameList = {"John", "Mark", "Amber", "Tony", "Matt", "George", 
    "Will", "Bob", "Paul", "Mary Ellen", "Kate", "Joe", "Fred", "Joe", 
    "Anne", "Amber", "Kimberly", "Kelsey", "Matthew"};

    //print original
    System.out.println("Before sorting the names: ");
    for(String element: nameList)
    System.out.print(element + " ");
    System.out.println("\n");
    //Merge Sort
    System.out.println("After sorting the names: ");
    mergesort(nameList, 0, nameList.length);

}

这些是我的方法:

private static void merge(String[] data, int first, int n1, int n2) {
    String[] temp = new String[n1 + n2];
    int copied = 0;
    int copied1 = 0;
    int copied2 = 0;

    while((copied1 < n1) && (copied2 < n2)) {
        if(data[first + copied].compareTo(data[first + n1 + copied2]) < 0)
            temp[copied++] = data[first + (copied1++)];
        else
            temp[copied++] = data[first + n1 +(copied2++)];
    }

    while(copied1 < n1)
        temp[copied++] = data[first + (copied1++)];

    for(int i = 0; i < copied; i++)
        data[first +i] = temp[i];

}


public static void mergesort(String[] data, int first, int n) {
    int n1 = 0;
    int n2 = 0;

    if(n > 1) {
        n1 = n/2;
        n2 = n-n1;

        mergesort(data, first, n1);
        mergesort(data, first + n1, n2);
    }

    merge(data, first, n1, n2);

    for(String element: data)
        System.out.print(element +" ");
}

当我运行该程序时,它对其中的一些进行了正确排序,但总的来说它不是无序的。

最佳答案

您有一个错字和两个被遗忘的行。下面是固定函数。将其与您的进行比较。

    private static void merge(String[] data, int first, int n1, int n2)
    {
        String[] temp = new String[n1 + n2];
        int copied = 0;
        int copied1 = 0;
        int copied2 = 0;

        while ((copied1 < n1) && (copied2 < n2))
        {
            if (data[first + copied1].compareTo(data[first + n1 + copied2]) < 0)
                temp[copied++] = data[first + (copied1++)];
            else
                temp[copied++] = data[first + n1 + (copied2++)];
        }

        while (copied1 < n1)
            temp[copied++] = data[first + (copied1++)];
        while (copied2 < n2)
            temp[copied++] = data[first + n1 + (copied2++)];

        for (int i = 0; i < copied; i++)
            data[first + i] = temp[i];

    }

关于java - 合并排序字符串方法java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13759539/

相关文章:

java.lang.UnsupportedOperationException : 'posix:permissions' not supported as initial attribute on Windows

java - SQLite 更新后获取旧值

java - 解析时间字符串时出错

java - 添加到静态成员字段

php - 错误 : Using $this when not in object context

c++ - C++静态成员函数的实现

谁能解释为什么我的合并排序不起作用?

java - 就地在链表上实现自然归并排序,并且只交换来自节点的项目

java - 关闭时是否存在现有的 FileInputStream 删除?

c++ - 合并排序程序总是有效,但有时会在最后说 abort trap