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);
}
//+------------------------------------------------------------------+