Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Telegram üzerinde bulun!
Fan sayfamıza katılın
Komut dosyasını ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Komut dosyasını beğendiniz mi? MetaTrader 5 terminalinde deneyin
Kütüphaneler

İşlev İşaretçileri kullanarak Introsort (İçe dönük sıralama) - MetaTrader 5 için kütüphane

Görüntülemeler:
95
Derecelendirme:
(5)
Yayınlandı:
MQL5 Freelance Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

Gözlemsel Sıralama

Bu, orijinal Introsort kütüphanesinin gözden geçirilmiş bir sürümüdür, şimdiIntrosort() işlevi , özel karşılaştırma işlevine isteğe bağlı bir işlev işaretçisi kabul eder.

Intro veya Introspective sort, hızlı performans sağlayan hibrit bir sıralama algoritmasıdır. Üç aşamaya dayanan karşılaştırma tabanlı bir sıralama algoritmasıdır. Quicksort sort ile birlikte heapsort ve insertion-sort algoritmalarını kullanır.

Quick Sort
Quick sort, dizideki bir pivot elemanı seçerek çalışan, ardından diğer elemanları iki alt diziye bölen ve elemanların daha büyük veya daha küçük olup olmadığını kontrol eden bir böl ve fethet algoritmasıdır. Ortalama olarak quick sort alogirthm O(nlog(n)) zaman alır, en kötü durum karmaşıklığı O(n2)'dir.

Heap Sort
Heap sort algoirthm ikili heap tabanlı karşılaştırma tabanlı bir sıralama yöntemidir. En kötü durum ve ortalama durum zaman karmaşıklığı O(nlog(n)) ve en iyi durum zaman karmaşıklığı O(n) olan kararsız bir sıralama algoritmasıdır.

Ekleme Sıralama
Ekleme sıralama algoritması, son sıralanmış diziyi her seferinde bir öğe oluşturan basit bir sıralama yöntemidir. En kötü durum ve ortalama durum için zaman karmaşıklığı O(n2) ve en iyi durum için O(n)'dir.

Introsort algoritması bu üç algoritmanın iyi kısımlarını birleştirir. Hızlı sıralama ile başlar, özyineleme derinliği sıralamaya başlanan öğe sayısına bağlı olarak bir seviyeyi aştığında heapsort'a geçer ve öğe sayısı bazı eşik değerlerinden az olduğunda ekleme sıralamasına geçer.

  • Bölüm boyutu maksimum derinlik sınırını aşma olasılığı olacak şekildeyse Introsort Heapsort'a geçer.
  • Bölüm boyutu çok küçükse, Quicksort Ekleme Sıralamasına geçer.
  • Bölüm boyutu sınırın altındaysa ve çok küçük değilse, basit bir quicksort gerçekleştirir.

Introsort özellikle iyi bir çalışma zamanı davranışına sahiptir. Günümüzde kullanılan en hızlı karşılaştırmalı sıralama algoritmalarından biridir ve C++ STL, Microsoft .NET Framework Sınıf Kütüphanesi, GNU Standart C++ kütüphanesi ve LLVM libc++ kütüphanesi ile sağlanan std::sort algoritmasının olağan uygulamasıdır.

Referanslar:

//+------------------------------------------------------------------+
//| Introsort|
//+------------------------------------------------------------------+
/**
 * less karşılaştırma fonksiyonunu kullanarak girdi dizisini yerinde sıralayın.
 * Kendi karşılaştırma fonksiyonunuzu belirtebilirsiniz. Herhangi bir işlev
 * belirtilmezse, artan sıralama kullanılır.
 */
template<typename T>
void Introsort(T &arr[]);

//+------------------------------------------------------------------+
//| Özel Less() işlevine bir işaretçi kullanarak sıralama yapın. |
//| Özel bir Less() işlevi iki argüman alır ve mantık içerir |
//| sıralanmış dizideki göreli sıralarına karar vermek için. Buradaki fikir
//| Introsort() fonksiyonunun herhangi bir | için kullanılabilmesi amacıyla esneklik sağlamak için
//| tip (nesneler veya yapılar gibi kullanıcı tanımlı tipler dahil) |
//| ve istenen herhangi bir sıralama düzenini elde etmek için kullanılabilir (artan, |
//| azalan veya yapı alanlarının özel sıralaması). |
//+------------------------------------------------------------------+
template<typename T, typename LessFunc>
void Introsort(T &arr[], LessFunc pfnLess);

Karşılaştırma fonksiyonu Daha az:

Kendi karşılaştırma fonksiyonunuzu belirtebilirsiniz. Herhangi bir işlev belirtilmezse, artan sıralama kullanılır. Özel bir Less() işlevi iki bağımsız değişken alır ve bunların sıralanmış dizideki göreli sırasına karar vermek için mantık içerir. Buradaki fikir, Introsort() işlevinin herhangi bir tür için (kullanıcı tanımlı türler dahil) kullanılabilmesi ve istenen herhangi bir sırayı (artan, azalan veya başka herhangi bir) elde etmek için kullanılabilmesi için esneklik sağlamaktır. Örneğin, bir nesne veya yapı dizisini (kullanıcı tanımlı türler) özel bir sıralama düzeninde sıralamak için:

bool MyLessFunc(const MyStruct &x, const MyStruct &y)
  {
//--- A'ya göre sırala (asc)
   if(x.A < y.A) return(true);
   if(x.A > y.A) return(false);

//--- A'da eşitse, B'ye göre sırala (asc)
   if(x.B < y.B) return(true);
   if(x.B > y.B) return(false);

//--- B'de eşitse, C'ye göre sırala (asc)
   if(x.C < y.C) return(true);
   if(x.C > y.C) return(false);

//--- tüm anahtarlar eşittir
   return(false);
  }


// Özel Less fonksiyonuna bir işaretçi tipi tanımlayın.
typedef bool (*pLess)(const MyStruct &x, const MyStruct &y);


// Özel Less fonksiyonunu kullanarak yapı dizilerini sıralayın.
Introsort(structArray, (pLess)MyLessFunc);


MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/57233

Açı ve Hız Açı ve Hız

Gösterge, fiyat değişiminin açısını veya ortalama hızını gösterir.

Birim Profilleri Oluşturmak için Temel Kütüphane Birim Profilleri Oluşturmak için Temel Kütüphane

Grafik üzerinde Hacim Profilleri oluşturmak için temel kütüphane.

İkinci Çubuklar İkinci Çubuklar

Gösterge, grafik üzerinde rastgele bir ikinci zaman dilimi çizer.

FiyatDeğişiklikleri FiyatDeğişiklikleri

karakter fiyatlarının bir aralıkta değiştirilmesi