我需要有关对字符串数组使用归并排序的帮助。我已经看到很多关于 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/