docs: public static /*@pure@*/ int[] stableSort(double[] array){
  
      int[] index = new int[array.length];
      int[] newIndex = new int[array.length];
      int[] helpIndex;
      int numEqual;
      
      array = (double[])array.clone();
      for (int i = 0; i < index.length; i++) {
        index[i] = i;
        if (Double.isNaN(array[i])) {
          array[i] = Double.MAX_VALUE;
        }
      }
      quickSort(array,index,0,array.length-1);
  
      // Make sort stable
  
      int i = 0;
      while (i < index.length) {
        numEqual = 1;
        for (int j = i+1; ((j < index.length) && Utils.eq(array[index[i]],
  							array[index[j]])); j++)
  	numEqual++;
        if (numEqual > 1) {
  	helpIndex = new int[numEqual];
  	for (int j = 0; j < numEqual; j++)
  	  helpIndex[j] = i+j;
  	quickSort(index, helpIndex, 0, numEqual-1);
  	for (int j = 0; j < numEqual; j++) 
  	  newIndex[i+j] = index[helpIndex[j]];
  	i += numEqual;
        } else {
  	newIndex[i] = index[i];
  	i++;
        }
      }
  
      return newIndex;
    }