java - Keeping two arrays, String[] and int[], parallel with merge sort -


i'm having trouble keeping 2 arrays in parallel within merge sorting algorithm. suppose have array defmergesort , intmergesort2.

i lexicographically order string defmergesort,

string[] defmergesort = {"echo", "alpha", "charlie", "beta", "alpha", "echo"}; 

array intmergesort2 represents element position in parallel defmergesort. (ex: defmergesort[0] = echo contingent intmergesort2[0] = 0, defmergesort[3] = beta contingent intmergesort2[3] = 3) intmergesort2 rearranged in parallel defmergesort, although not numerically sorted,

int[] intmergesort2 = {0,1,2,3,4,5}; 

the end result should similar (not sure if parallel ordering intmergesort2[] in example correct duplicate strings in defmergesort[]):

  • defmergesort[0] alpha = intmergesort2[1] 1
  • defmergesort[1] alpha = intmergesort2[4] 4
  • defmergesort[2] beta = intmergesort2[3] 3
  • defmergesort[3] charlie = intmergesort2[2] 2
  • defmergesort[4] echo = intmergesort2[0] 0
  • defmergesort[5] echo = intmergesort2[5] 5

the following merge sort algorithm can lexicographically order defmergesort, although cannot figure out how keep defmergesort in parallel stipulated above:

//mergesort code found at: //http://www.buildingjavaprograms.com/code-files/2ed/ch13/mergesort.java public static void mergesort(string[] defmergesort, int[] intmergesort2) {     if (defmergesort.length > 1) {         // split array 2 halves         string[] left = lefthalf(defmergesort);         string[] right = righthalf(defmergesort);         // recursively sort 2 halves         mergesort(left, intmergesort2);         mergesort(right, intmergesort2);         // merge sorted halves sorted whole         merge(defmergesort, intmergesort2, left, right);     } }  // returns first half of given array. public static string[] lefthalf(string[] defmergesort) {     int size1 = defmergesort.length / 2;     string[] left = new string[size1];     (int = 0; < size1; i++) {         left[i] = defmergesort[i];     }     return left; }  // returns second half of given array. public static string[] righthalf(string[] defmergesort) {     int size1 = defmergesort.length / 2;     int size2 = defmergesort.length - size1;     string[] right = new string[size2];     (int = 0; < size2; i++) {         right[i] = defmergesort[i + size1];     }     return right; }  // merges given left , right arrays given // result array.  second, working version. // pre : result empty; left/right sorted // post: result contains result of merging sorted lists; public static void merge(string[] defmergesort, int[] intmergesort2, string[] left, string[] right){     int i1 = 0;   // index left array     int i2 = 0;   // index right array     for(int = 0; < defmergesort.length; i++){         if (i2 >= right.length || (i1 < left.length &&         left[i1].compareto(right[i2]) <= 0)) {             defmergesort[i] = left[i1];             i1++;         } else {             defmergesort[i] = right[i2];             i2++;         }     } } 

define object containing integer , string values, have single array of object, sort array.

i.e.

class dataelement {     final string str;     final int i;      //add constructor here }  dataelement[] array; // sort array 

note either need implement comparable in dataelement or specify comparator sort method in order control sorting.


Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -