public void mergesort(int[] array, int l, int r) { #header
  int i, j, k, m; #variables
  int[] b = new int[r - l + 1]; #array
  if (r>l) { #check
    m = (l+r)/2; #determineMid
    mergesort(array, l, m); #sortLeftside
    mergesort(array, m+1, r); #sortRightside
    for (i=l; i<=m && i<array.length; i++) b[i-l] = array[i]; #copyLeftside
    for (j=m+1; j<=r; j++) b[r+m+1-j-l] = array[j]; #copyRightside
    for (k=l, i=0, j=r-l; k<=r && k<array.length; k++) #loop
      array[k] = (b[i] <b[j]) ? b[i++] : b[j--]; #merge
  }
}