java - from Missed Function Call


i'm sorry if posted elsewhere (i can't find anything, problem rather specific), understand (or least in theory) error is; having trouble on how fix it. code supposed show how merge sort works; code runs, never hits function call "merge" (code below, know bad practice call in in imports, isn't major project, don't care; maybe preview, written import java.util.; , import java.security.;).

import java.util.*; import java.security.*;  public class merge {     public static void mergesort(int[] data) {         sortarray(data, 0, data.length - 1);     }      private static void sortarray(int[] data, int low, int high) {         if ((high - low) >= 1) {             int m1 = low + high;             int m2 = m1 + 1;              system.out.printf("split:  %s\n", subarraystring(data, low, high));             system.out.printf("          %s\n", subarraystring(data, low, m1));             system.out.printf("          %s\n\n", subarraystring(data, m2, high));              sortarray(data, low, m1);             sortarray(data, m2, high);              merge(data, low, m1, m2, high);         }     }      public static void merge(int[] data, int l, int m1, int m2, int r) {         int lindex = l, rindex = r, cindex = l, combined[] = new int[data.length];          system.out.printf("merge:  %s\n", subarraystring(data, l, m1));         system.out.printf("             %s\n", subarraystring(data, m1, r));          while (lindex <= data[rindex]) {             if (data[lindex] <= data[rindex])                 combined[cindex++] = data[lindex++];             else                 combined[cindex++] = data[rindex++];         }          if (lindex == m2)             while (rindex <= r) combined[cindex++] = data[rindex++];         else             while (lindex <= m1) combined[cindex++] = data[rindex++];     }      private static string subarraystring(int[] data, int low, int high) {         stringbuilder temp = new stringbuilder();          (int = 0; < low; i++)             temp.append("     ");          (int = 0; < high; i++)             temp.append(" " + data[i]);          return temp.tostring();     }      public static void main2() {         securerandom gen = new securerandom();          int[] data = new int[10];          (int = 0; < data.length; i++) data[i] = 10 + gen.nextint(50);          system.out.printf("\nunsorted array:\n%s\n\n", arrays.tostring(data));         mergesort(data);         system.out.printf("\nsorted array:\n%s\n\n", arrays.tostring(data));     } } 

let me know if need driver file. restate, problem never reaches merge function call , results in stack overflow error.

the common cause stack overflow bad recursive call. typically, caused when recursive functions doesn't have correct termination condition. in code 1st recursive call call same parameter 0 , (length - 1) , no termination , stuck in infinite loop. fix code , update value of m1 terminate.

consider array length 6:

low = 0 , high = 5  m1 = 5 sortarray(data, 0, 5); 

Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -