crn pisze:Wiecie moze jakim algorytmem funkcja mql sortuje talbice ?
Może tak jak w Javie dobiera optymalny algorytm dla wielkości tablicy ?
Poniżej znalazłem algorytm QuickSort dla mql wraz z funkcją mierzącą czas sortowania.
Można zmierzyć jak szybko posortuje jakąś tablicę a następnie zaimplementować to samo dla funkcji ArraySort()
int begin=GetTickCount();
ArraySort(Tablica);
int end=GetTickCount();
Print("Czas realizacji zlecenia wyniósł: "+(end-begin)+" ms");
Przynajmniej sprawdzi czy algorytm sortowania jest porównywalnie wydajny do QuickSorta.
Kod: Zaznacz cały
//+------------------------------------------------------------------+
//|                                               BehchQuickSort.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| быстрая сортировка double                                        |
//+------------------------------------------------------------------+
void QuickSort(double& item[],int left,int right)
  {
   int    i, j;
   int    center;
   double x;
//----
   i=left;
   j=right;   
   center=item[(left+right)/2];
   while(i<=j)
     {
      while(item[i]<center && i<right) i++;
      while(item[j]>center && j>left)  j--;
      if(i<=j)
        {
         x=item[i];
         item[i]=item[j];
         item[j]=x;
         i++; j--;
        }
     } 
   if(left<j)  QuickSort(item, left, j);
   if(right>i) QuickSort(item, i, right);
  }
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
   int    file;
   double data[];
   int    length=0;
   int    start,total;
   int    min,sec,hsec,t=0;
//----
   Print("QuickSort test.\nLoading data...!");
   file=FileOpen("array_int.dat",FILE_BIN|FILE_READ);
   if(file<0)
     {
      Print("file array_int.dat not found.\n");
      return(-1);
     }
//----
   length=FileSize(file)/8;
   ArrayResize(data,length);
   FileReadArray(file,data,0,length);
   FileClose(file);
//---- start sorting
   start=GetTickCount();
//   qsort(data, length,sizeof(int),cmp);
//   QuickSort<int>(data,0,length-1);
//   ArraySort(data);
   QuickSort(data,0,length-1);
   total=GetTickCount()-start;
//---- human presentation
   min=total/60000;
   t=total%60000;
   sec=t/1000;
   hsec=t%1000;
//---- outpit results
   Print("Sorting int array[",length,"] time is ",min," min ",sec," sec ",hsec," msec");
//----
   return(0);
  }
//+------------------------------------------------------------------+