int[] ranked = Utils.sortUnsafe(m_attributeMerit);
int[] ranked = Utils.sort(m_attributeMerit);
  public double[][] rankedAttributes ()    throws Exception  {    int i, j;    if (m_attributeList == null || m_attributeMerit == null) {      throw  new Exception("Search must be performed before a ranked " 			   + "attribute list can be obtained");    }    int[] ranked = Utils.sortUnsafe(m_attributeMerit);    // reverse the order of the ranked indexes    double[][] bestToWorst = new double[ranked.length][2];    for (i = ranked.length - 1, j = 0; i >= 0; i--) {      bestToWorst[j++][0] = ranked[i];    }    // convert the indexes to attribute indexes    for (i = 0; i < bestToWorst.length; i++) {      int temp = ((int)bestToWorst[i][0]);      bestToWorst[i][0] = m_attributeList[temp];      bestToWorst[i][1] = m_attributeMerit[temp];    }        if (m_numToSelect > bestToWorst.length) {      throw new Exception("More attributes requested than exist in the data");    }    if (m_numToSelect <= 0) {      if (m_threshold == -Double.MAX_VALUE) {	m_numToSelect = bestToWorst.length;      } else {	determineNumToSelectFromThreshold(bestToWorst);      }    }    /*    if (m_numToSelect > 0) {      determineThreshFromNumToSelect(bestToWorst);      } */    return  bestToWorst;  }