我正在尝试制作自己的文本二进制排序方法,虽然我成功编译了它,但它并没有真正完成排序工作并返回空值。有人可以帮忙指出问题吗?非常感谢!!
类合并排序{
//main method
public static void main(String [] args) throws IOException{
String [] words = readWords(args[0]);
long t1 = new Date().getTime();
mergesort(words);
long t2 = new Date().getTime();
System.out.println("execution time:" + (t2 - t1) + " milliseconds");
prWords(words);
}
//method for reading file
public static String [] readWords(String fn)throws IOException{
BufferedReader br = new BufferedReader(new FileReader(fn));
String line = "";
StringBuilder allwords = new StringBuilder();
while ((line = br.readLine())!= null){
String [] items = line.trim().split("\\s+");
allwords.append(convertCase(items[0])+"\t");
}
br.close();
return allwords.toString().split("\t");
}
//Convert Case method
public static String convertCase(String n){
String firstWd = n;
firstWd = n.charAt(0) + n.substring(1).toLowerCase();
return firstWd;
}
public static String [] sortedWs = {};
public static void mergesort(String [] Ws){
sortedWs = new String[Ws.length];
mergesort(Ws, 0, Ws.length);
}
public static void mergesort(String [] Ws, int bgn, int end){
if (end - bgn == 1) return;
int mid = (bgn+end)/2;
mergesort(Ws, bgn, mid);
mergesort(Ws, mid, end);
merge(Ws, bgn, end);
}
public static void merge(String [] Ws, int bgn, int end){
int mid = (bgn+end)/2;
int b1 = bgn;
int b2 = end;
int x = 0;
while (b1 < mid && b2 < end) {
if (Ws[b1].compareTo(Ws[b2]) <= 0){
sortedWs[x] = Ws[b1]; b1++; x++;
} else {
sortedWs[x] = Ws[b2]; b2++; x++;
}
}
//copy the rest
if (b1 >= mid)
while (b2 < end) { sortedWs[x] = Ws[b2]; b2++; x++; }
if (b2 >= end)
while (b1 < mid) { sortedWs[x] = Ws[b1]; b1++; x++; }
for(int i = 0; i < end-bgn; i++) {
Ws[bgn+i] = sortedWs[i];
}
}
public static void prWords(String [] strs){
for (String x : strs){
System.out.println(x);
}
}
最佳答案
merge() 中的这一行:
int b2 = end;
我认为应该是:
int b2 = mid;
通过此更改,几次测试运行在我的计算机上给出了正确的结果。
关于java - (Java文本处理)文本排序方法,结果为null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40268420/