//+------------------------------------------------------------------+
//|                                            Prueba_Sort_Array.mq4 |
//|                                       Copyright © 2009, NsTrader |
//|                                           NsTrader.Mql@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, NsTrader"
#property link      "NsTrader.Mql@gmail.com"

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----

   int array[5][2];
   
   array[0][0] = 9;
   array[0][1] = 3;
   
   array[1][0] = 8;
   array[1][1] = 3;
   
   array[2][0] = 9;
   array[2][1] = 6;
   
   array[3][0] = 6;
   array[3][1] = 3;
   
   array[4][0] = 9;
   array[4][1] = 4;
   
   //ArraySort(array,WHOLE_ARRAY,0,MODE_DESCEND);
   Sort(array);
   
   Comment(CommentArray_2_par_int(array));
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

void Sort(int& Array[][], int Mode = MODE_DESCEND)
{
   ArraySort(Array,WHOLE_ARRAY,0,Mode);
   int Range = ArrayRange(Array,0);
   int Array.Temp[1][2];ArrayResize(Array.Temp,Range);
   int Temp.i[1][2]; ArrayResize(Temp.i,Range);
   ArrayCopy(Array.Temp,Array);
   int Temp.index = 0;
   for(int i=0; i< Range; i++)
   {
      if(i==0)
      {
         ArrayInitialize(Temp.i,0);
         Temp.i[0][0] = Array[i][1];
         Temp.i[0][1] = i;
      }
      else
      {
         if(Array[i-1][0]-Array[i][0] == 0)
         {
            Temp.index++;
            Temp.i[Temp.index][0] = Array[i][1];
            Temp.i[Temp.index][1] = i;
         }
         else
         {
            if(Temp.index > 0)
            {
               ArraySort(Temp.i,WHOLE_ARRAY,0,Mode);
               int m=1;
               for(int k=Temp.index; k>=0; k--,m++)
               {
                  int n = Temp.i[k][1];
                  Array[i-m][0] = Array.Temp[n][0];
                  Array[i-m][1] = Array.Temp[n][1];
               }
            }
            ArrayInitialize(Temp.i,0);
            Temp.index = 0;
         }
      }
   
   }
}


string CommentArray_2_par_int(int Array[][])
{
   string strc2 = "";
   string str.cero = "";
   int pp=0;
   int ps = 10;
   for(int ar=0; ar<ArrayRange(Array,0); ar++)
   {
      str.cero = "";
      if(ar < 10) str.cero = "00";
      if(ar >= 10 && ar < 100) str.cero = "0";
      strc2 = StringConcatenate(strc2 , " | ",str.cero,ar," - {",Array[ar][0],",",Array[ar][1],"}");
      pp++;
      if(pp == ps)
      {
         ps = pp + 10;
         strc2 = StringConcatenate(strc2 ,"\n");
      }
   }
   return(strc2);
}