public static Stella_Object quickSortPickSplitElement(edu.isi.stella.Stella_Object[] vector, int start, int end, java.lang.reflect.Method predicate) {
    { Stella_Object splitelement = vector[start];
      int middle = ((start + end) >> 1);

      end = end - 1;
      if (((Boolean)(edu.isi.stella.javalib.Native.funcall(predicate, null, new java.lang.Object [] {splitelement, vector[middle]}))).booleanValue()) {
        if (((Boolean)(edu.isi.stella.javalib.Native.funcall(predicate, null, new java.lang.Object [] {vector[middle], vector[end]}))).booleanValue()) {
          splitelement = vector[middle];
          vector[middle] = (vector[start]);
        }
        else if (((Boolean)(edu.isi.stella.javalib.Native.funcall(predicate, null, new java.lang.Object [] {splitelement, vector[end]}))).booleanValue()) {
          splitelement = vector[end];
          vector[end] = (vector[start]);
        }
        else {
        }
      }
      else {
        if (((Boolean)(edu.isi.stella.javalib.Native.funcall(predicate, null, new java.lang.Object [] {splitelement, vector[end]}))).booleanValue()) {
        }
        else if (((Boolean)(edu.isi.stella.javalib.Native.funcall(predicate, null, new java.lang.Object [] {vector[middle], vector[end]}))).booleanValue()) {
          splitelement = vector[end];
          vector[end] = (vector[start]);
        }
        else {
          splitelement = vector[middle];
          vector[middle] = (vector[start]);
        }
      }
      return (splitelement);
    }
  }