我正在尝试使用合并排序按升序对字符串的字符进行排序,但我不知道在哪里应该比较字符以便对它们进行排序。 到目前为止,这是我的方法:
public static String mergeSort(String s)
{
String left = "",
right = "";
if(s.length() <= 1)
return s;
int middle = s.length()/2;
for(int i = 0; i < middle; i++)
left = left + s.charAt(i);
for(int i = middle+1; i < s.length(); i++)
right = right + s.charAt(i);
left = mergeSort(left);
right = mergeSort(right);
return merge(left, right);
}
如果你帮助我,我会很高兴的
感谢
答案 0 :(得分:1)
首先,我建议您阅读Wikipedia's entry on MergeSort。
根据您的代码建议两件事
mergeSort()
中,而是发生在merge()
中。请参阅Wikipedia的伪代码以了解如何编写它。left
和right
String对象。无需使用charAt()
。相反,请使用String.substring()
(http://docs.oracle.com/javase/7/docs/api/java/lang/String.html)。用此设置left
和right
:
String left = s.substring(0, middle);
String right = s.substring(middle);
答案 1 :(得分:0)
您可以使用两个字符的减法。因此,如果您有两个字符a
和b
以及:
a - b = 0
,字符相等a - b > 0
,a
更大a - b < 0
,b
更大这正是Character.compareTo()
方法的实现方式。
答案 2 :(得分:0)
String
,因为Java中的String
是不可变的。您将创建数千个对象,这将减慢您的实施速度。我建议改为使用char[]
。merge()
子例程中进行实际比较。您比较char
的方式与您比较的方式相同,例如int
,只需与标准>
运算符进行比较。答案 3 :(得分:0)
您可以将输入字符串转换为字符数组,并进行合并排序计算,如下所示:
import java.util.Queue;
import java.util.LinkedList;
public class MergeSort {
public static void sort(char[] chars, int low, int right) {
if (low < right) {
int middle = (low + right) / 2;
sort(chars, low, middle);
sort(chars, middle + 1, right);
merge(chars, low, middle, right);
}
}
public static void merge(char[] chars, int low, int middle, int right) {
Queue<Character> queue1 = new LinkedList<Character>();
Queue<Character> queue2 = new LinkedList<Character>();
for (int i = low; i <= middle; i++) {
queue1.add(chars[i]);
}
for (int i = middle + 1; i <= right; i++) {
queue2.add(chars[i]);
}
int i = low;
while (!queue1.isEmpty() && !queue2.isEmpty()) {
if (queue1.peek() <= queue2.peek()) {
chars[i++] = queue1.poll();
} else {
chars[i++] = queue2.poll();
}
}
while (!queue1.isEmpty()) {
chars[i++] = queue1.poll();
}
while (!queue2.isEmpty()) {
chars[i++] = queue2.poll();
}
}
public static void sort(char[] chars) {
sort(chars, 0, chars.length - 1);
}
public static void sort(String string) {
sort(string.toCharArray());
}
public static void main(String[] args) {
String string = "sarathkumarsivan";
char[] chars = string.toCharArray();
MergeSort.sort(chars);
for (int i = 0; i < chars.length; i++) {
if (i > 0) { System.out.print(", "); }
System.out.print(chars[i]);
}
}
}