Java MergeSort with Strings -
my teacher out week , gave merge sort code use. written int[]array , supposed make 1 string[]array.
here code:
public static void mergesort(int[ ] a, int from, int to) { if (from == to) return; int mid = (from + to) / 2; // sort first , second half mergesort(a, from, mid); mergesort(a, mid + 1, to); merge(a, from, mid, to); }// end mergesort public static void merge(int[ ] a, int from, int mid, int to) { int n = - + 1; // size of range merged int[ ] b = new int[n]; // merge both halves temporary array b int i1 = from; // next element consider in first range int i2 = mid + 1; // next element consider in second range int j = 0; // next open position in b // long neither i1 nor i2 past end, move smaller b while (i1 <= mid && i2 <= to) { if (a[i1] < a[i2]) { b[j] = a[i1]; i1++; } else { b[j] = a[i2]; i2++; } j++; } // note 1 of 2 while loops below executed // copy remaining entries of first half while (i1 <= mid) { b[j] = a[i1]; i1++; j++; } // copy remaining entries of second half while (i2 <= to) { b[j] = a[i2]; i2++; j++; } // copy temporary array (j = 0; j < n; j++) a[from + j] = b[j]; }// end merge
now here attempt:
//merge sort public static void mergesort(string[] a, int from, int to) { if (from == to) return; int mid = (from + to) / 2; // sort first , second half mergesort(a, from, mid); mergesort(a, mid + 1, to); merge(a, from, mid, to); }// end mergesort //work public static void merge(string[] a, int from, int mid, int to) { int n = - + 1; // size of range merged string[]b = new string[n]; // merge both halves temporary array b int i1 = from; // next element consider in first range int i2 = mid + 1; // next element consider in second range int j = 0; // next open position in b // long neither i1 nor i2 past end, move smaller b while (i1 <= mid && i2 <= to) { if (a[i1].compareto(a[i2]) > 0) { b[j] = a[i1]; i1++; } else { b[j] = a[i2]; i2++; } j++; } // note 1 of 2 while loops below executed // copy remaining entries of first half while (i1 <= mid) { b[j] = a[i1]; i1++; j++; } // copy remaining entries of second half while (i2 <= to) { b[j] = a[i2]; i2++; j++; } // copy temporary array (j = 0; j < n; j++) a[from + j] = b[j]; }//end merge
i feel code gave missing explain in class since out i'm lost do. appreciated. thank you!
everything works find - compareto
in merge
has wrong direction. here working example
import java.util.arrays; public class mergesort { public static void main(string[] args) { string[] values = {"foo", "bar", "alice", "bob", "celine", "david"}; mergesort(values, 0, values.length - 1); system.out.println("result " + arrays.tostring(values)); } public static void mergesort(string[] a, int from, int to) { if (from == to) { return; } int mid = (from + to) / 2; // sort first , second half mergesort(a, from, mid); mergesort(a, mid + 1, to); merge(a, from, mid, to); }// end mergesort //work public static void merge(string[] a, int from, int mid, int to) { int n = - + 1; // size of range merged string[] b = new string[n]; // merge both halves temporary array b int i1 = from; // next element consider in first range int i2 = mid + 1; // next element consider in second range int j = 0; // next open position in b // long neither i1 nor i2 past end, move smaller b while (i1 <= mid && i2 <= to) { if (a[i1].compareto(a[i2]) < 0) { b[j] = a[i1]; i1++; } else { b[j] = a[i2]; i2++; } j++; } // note 1 of 2 while loops below executed // copy remaining entries of first half while (i1 <= mid) { b[j] = a[i1]; i1++; j++; } // copy remaining entries of second half while (i2 <= to) { b[j] = a[i2]; i2++; j++; } // copy temporary array (j = 0; j < n; j++) { a[from + j] = b[j]; } }//end merge }
Comments
Post a Comment