for whatever reason, despite fact it's entirely generic , works integers whenever it's tested strings seems skip last iteration of merging. i've scoured code couple hours , can't see why isn't working correctly insight has received!
import java.util.iterator; import java.util.linkedlist;
/** * * @author paul */ public class mergesort> {
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(); (int = 0; sojourner.hasnext(); i++) { if (i < middle) { left.add(sojourner.next()); } else { right.add(sojourner.next()); } } return truemerge(truesort(left),
truesort(right)); }
private linkedlist<t> truemerge(linkedlist<t> left,
linkedlist right) { linkedlist result = new linkedlist(); while (left.size() > 0 || right.size() > 0) { if (left.size() > 0 && right.size() > 0) { if (left.getfirst().compareto(right.getfirst()) < 0) { result.add(left.pop()); } else { result.add(right.pop()); } } else if (left.size() > 0) { result.add(left.pop()); } else { result.add(right.pop()); } } return result; } }
here's main java file
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(); (int = 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 command line arguments */ public static void main(string[] args) { rand = new random(); linkedlist<integer> numbers = new linkedlist<integer>(); for(int = 0; i< 100;i++){ numbers.add(randomnumber(1,1000)); } system.out.println(getstring(numbers)); mergesort m = new mergesort(numbers); //change
later purely static numbers = 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); words = mm.sort(); system.out.println(getstring(words)); } }
this outputs:
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
hello, my, name, is, barthoal, i, enjoy, long, beach, walks, would, you, like, to, come, join, me, in, my, stardestroyer-mobilehome? (tm)
barthoal, enjoy, hello, i, is, join, my, stardestroyer-mobilehome? (tm), beach, come, in, like, long, me, my, name, to, walks, would, you
as can see, numbers sorted. strings seem have missed last iteration of merging. went wrong?
string comparison case sensitive. is, uppercase strings placed before lower case ones. merge sort algorithm should allow take own comparator string.case_insensitive_order use case.
Comments
Post a Comment