【发布时间】:2011-04-29 21:29:29
【问题描述】:
无论出于何种原因,尽管事实上它是完全通用的并且在使用字符串进行测试时可以使用整数,但它似乎跳过了最后一次合并迭代。我已经搜索了我的代码几个小时,但我看不出它为什么不能正常工作,所以任何人的任何见解都会受到好评!
导入 java.util.Iterator;进口 java.util.LinkedList;
/** * * @author 保罗 */ public 类合并排序> {
LinkedList<T> theList; MergeSort(LinkedList<T> toBeSorted) { theList = toBeSorted; } public LinkedList<T> sort() { return trueSort(theList); } private LinkedList<T> trueSort(LinkedList<T> sorting) { if (sorting.size() <= 1) { return sorting; } LinkedList<T> left, right, sorted; left = new LinkedList<T>(); right = new LinkedList<T>(); int middle = sorting.size() / 2; Iterator<T> sojourner = sorting.iterator(); for (int i = 0; sojourner.hasNext(); i++) { if (i < middle) { left.add(sojourner.next()); } else { right.add(sojourner.next()); } } return trueMerge(trueSort(left),trueSort(右)); }
private LinkedList<T> trueMerge(LinkedList<T> left,LinkedList 对){ LinkedList 结果 = 新的 LinkedList(); 而 (left.size() > 0 || right.size() > 0) { if (left.size() > 0 && right.size() > 0) { if (left.getFirst().compareTo(right.getFirst()) 0) { 结果.add(left.pop()); } 别的 { 结果.add(right.pop()); } } 返回结果; } }
这是我的主要 java 文件
import java.util.Iterator; import java.util.LinkedList; import java.util.Random; /** * * @author paul */ public class Main { public static Random Rand; public static int randomNumber(int min, int max) { return min + (int) (Rand.nextDouble() * ((max - min) +1)); }
public static <T> String getString(LinkedList<T> linkInt) { String s = ""; Iterator<T> interLink = linkInt.iterator(); for (int i = 0; interLink.hasNext(); i++) { s = s + interLink.next().toString(); if (interLink.hasNext()) { s = s + ", "; } if ((i + 1) % 10 == 0) { s = s + "\n"; } } return s; } /** * @param args the command line arguments */ public static void main(String[] args) { Rand = new Random(); LinkedList<Integer> numbers = new LinkedList<Integer>(); for(int i = 0; i< 100;i++){ numbers.add(randomNumber(1,1000)); } System.out.println(getString(numbers)); MergeSort m = new MergeSort(numbers); //change this以后是纯静态的 数字 = m.sort(); System.out.println(getString(numbers));
LinkedList<String> words = new LinkedList<String>(); words.add("Hello"); words.add("MY"); words.add("name"); words.add("Is"); words.add("Barthoal"); words.add("I"); words.add("Enjoy"); words.add("long"); words.add("beach"); words.add("walks"); words.add("would"); words.add("you"); words.add("like"); words.add("to"); words.add("come"); words.add("Join"); words.add("me"); words.add("in"); words.add("my"); words.add("StarDestroyer-MobileHome?(TM)"); System.out.println(getString(words)); MergeSort mm = new MergeSort(words); 单词 = mm.sort(); System.out.println(getString(words)); } }
这个输出:
304、842、342、794、574、99、250、885、 408、387、899、73、391、883、771、 848、968、504、129、370、994、897、 649、345、983、326、688、547、541、 567、777、987、201、326、298、959、 166、962、864、797、512、505、609、 208、21、43、458、442、138、570、455、 442、516、294、406、310、215、212、 397、98、938、496、263、973、571、 861、687、276、927、608、421、831、 820、510、68、172、504、8、976、992、 68、497、33、233、607、587、611、695、 834、338、448、978、359、413、1、819、 18、977、693、649
1、8、18、21、33、43、68、68、73、98、 99、129、138、166、172、201、208、212、 215、233、250、263、276、294、298、 304、310、326、326、338、342、345、 359、370、387、391、397、406、408、 413、421、442、442、448、455、458、 496、497、504、504、505、510、512、 516、541、547、567、570、571、574、 587、607、608、609、611、649、649、 687、688、693、695、771、777、794、 797、819、820、831、834、842、848、 861, 864, 883, 885, 897, 899, 927, 938、959、962、968、973、976、977、 978、983、987、992、994
你好,我的名字,是,Barthoal,我, 享受,长,海滩,散步,会, 你,喜欢,来,来,加入,我,在,我的, StarDestroyer-MobileHome? (TM)
Barthoal,享受,你好,我,是,加入, MY,StarDestroyer-MobileHome? (TM值), 海滩,进来,进来,喜欢,长,我,我的, 姓名,去,走,会,你
如您所见,数字已完全排序。字符串似乎错过了合并的最后一次迭代。那么到底出了什么问题呢?
【问题讨论】:
-
我完全拒绝阅读。格式化您的代码。