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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -