Algoritmalar: std::sort, std::find ve std::binary_search Kullanımı

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

STL Algoritmaları: Tek Satırla Karmaşık İşlemler​


STL algoritmaları "iteratörler" üzerinden çalışır. Bu sayede aynı sort fonksiyonunu ister bir vector üzerinde, ister bir deque üzerinde (uygunsa) kullanabilirsiniz.



1. std::sort: Verileri Düzene Sokmak​


std::sort, verilen aralıktaki elemanları küçükten büyüğe sıralar. Arka planda genellikle Introsort (QuickSort, HeapSort ve InsertionSort karışımı) kullanır ve ortalama O(nlogn) karmaşıklığıyla çalışır.

C++:
#include <vector>
#include <algorithm>

std::vector<int> sayilar = {4, 1, 8, 3, 9};
std::sort(sayilar.begin(), sayilar.end()); // {1, 3, 4, 8, 9}

Önemli Not: Kendi nesnelerinizi (örneğin bir User sınıfı) sıralamak istiyorsanız, sınıf içinde < operatörünü aşırı yüklemeli veya sort fonksiyonuna üçüncü bir parametre olarak bir karşılaştırma fonksiyonu (lambda) vermelisiniz.



2. std::find: Samanlıkta İğne Aramak​


Bir konteyner içinde belirli bir değeri bulmak için kullanılır. Verileri baştan sona tarar (Linear Search), bu yüzden karmaşıklığı O(n)'dir.

C++:
auto it = std::find(sayilar.begin(), sayilar.end(), 8);

if (it != sayilar.end()) {
std::cout << "Bulundu: " << *it << std::endl;
} else {
std::cout << "Eleman bulunamadi." << std::endl;
}



3. std::binary_search: Hız Tutkunları İçin​


Eğer verileriniz sıralıysa, std::find yerine binary_search kullanmak çok daha mantıklıdır. Bu algoritma her adımda arama alanını yarıya indirerek O(logn) sürede sonuç verir.

C++:
// Not: binary_search sadece 'bool' döner.
if (std::binary_search(sayilar.begin(), sayilar.end(), 8)) {
std::cout << "8 listede mevcut!";
}



4. Algoritmaların Karşılaştırması​


AlgoritmaKarmaşıklıkÖn KoşulDönen Değer
std::sortO(nlogn)Rastgele erişimli iteratör.Yok (Yerinde sıralar).
std::findO(n)Yok.Eleman adresi (Iterator).
std::binary_searchO(logn)Veriler sıralı olmalı!True / False.



Sonuç​


Modern C++'ta döngü yazmak çoğu zaman "gereksiz yük" olarak kabul edilir. STL algoritmaları hem derleyici tarafından optimize edilmiştir hem de kodun niyetini (okunabilirliğini) artırır. Eğer veriniz milyonlarca elemandan oluşuyorsa, doğru arama algoritmasını (find vs binary_search) seçmek uygulamanızın hızını saniyelerden milisaniyelere indirebilir.
 
Geri
Üst