Skip to main content

C++ std::sort() Kullanımı: Temelden İleri Seviyeye Hızlı Sıralama Rehberi 💻

🎯 Bu Rehberde Ne Öğreneceksiniz?

Bu kılavuzda, C++’taki std::sort() fonksiyonunun nasıl çalıştığını, hangi algoritmayı kullandığını ve dizileri artan, azalan veya özel bir kurala göre nasıl sıralayabileceğinizi öğreneceksiniz.
Örneklerle birlikte kodları test edecek ve std::greater, lambda ifadeleri ve özel fonksiyonlar gibi gelişmiş teknikleri keşfedeceksiniz.


⚙️ std::sort() Nedir ve Nasıl Çalışır?

std::sort(), C++ Standard Kütüphanesi (<algorithm>) içinde bulunan, veri yapılarını (örneğin dizi veya vector) belirli bir düzende sıralamak için kullanılan yerleşik bir fonksiyondur.

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

first → Sıralanacak aralığın başlangıcı

last → Son elemandan bir sonrasını gösteren adres

comp → (isteğe bağlı) Karşılaştırma fonksiyonu. Girilmezse varsayılan olarak std::less<T>() kullanılır (artan sıralama).

🧩 Kullanılan algoritma: std::sort() hibrit bir teknik olan Introsort’u kullanır (Quick Sort + Heap Sort + Insertion Sort karışımı). Karmaşıklığı ortalama ve en kötü durumda O(N log N)’dir.


🔼 1. Artan Sırada Sıralama (Varsayılan)

Varsayılan kullanımda std::sort() dizileri artan sırada sıralar.


#include <iostream>
#include <algorithm>
using namespace std;

int main() {
int sayilar[] = {50, 40, 30, 20, 10};
int uzunluk = sizeof(sayilar)/sizeof(sayilar[0]);

std::sort(sayilar, sayilar + uzunluk); // Artan sıralama

for (int i = 0; i < uzunluk; i++)
cout << sayilar[i] << " ";
}

📝 Açıklama:

Üçüncü parametre belirtilmezse, std::less<int>() kullanılır ve diziyi küçükten büyüğe sıralar.


🔽 2. Azalan Sırada Sıralama

Azalan sıralama için üçüncü parametreye std::greater<int>() veya lambda fonksiyonu verilir.

Yöntem 1 – std::greater<int>()


int sayilar[] = {44, 22, 55, 33, 66};
std::sort(sayilar, sayilar + 5, greater<int>()); // Büyükten küçüğe

Yöntem 2 – Lambda Fonksiyonu


std::sort(sayilar, sayilar + 5, [](int a, int b){ return a > b; });

🧠 Not:

İki yöntem de aynı sonucu verir — diziyi azalan sırada sıralar.


🧩 3. Özel Sıralama (Kullanıcı Tanımlı)

Kendi karşılaştırma kuralınızı da tanımlayabilirsiniz. Aşağıdaki örnekte diziyi 10’a bölümden kalana göre sıralıyoruz:


#include <iostream>
#include <algorithm>
using namespace std;

bool kalanGoreSırala(int a, int b) {
return (a % 10) < (b % 10);
}

int main() {
int sayilar[] = {18, 45, 34, 92, 21};
std::sort(sayilar, sayilar + 5, kalanGoreSırala);
for (int s : sayilar) cout << s << " ";
}

📝 Açıklama:

(a % 10) değeri küçük olan eleman öne alınır. Sonuç: 21, 92, 34, 45, 18.


📊 Performans ve Karmaşıklık

ÖzellikAçıklama
AlgoritmaIntrosort (Quick Sort + Heap Sort + Insertion Sort kombinasyonu)
Ortalama KarmaşıklıkO(N log N)
En Kötü DurumO(N log N)
Kararlılık (stable)❌ Hayır — aynı değerlere sahip öğeler sıralama sonrası yer değiştirebilir

Kararlı sıralama gerekiyorsa: 👉 std::stable_sort() fonksiyonunu kullanabilirsiniz.


❓ Sıkça Sorulan Sorular (SSS)

  1. std::sort() sadece dizilerde mi çalışır?

Hayır, std::vector ve std::deque gibi rastgele erişim sağlayan yapılarla da çalışır.

  1. qsort() ile farkı nedir?

std::sort() C++’ın tür güvenli, modern versiyonudur. qsort() C diline aittir ve void* işaretçilerle çalışır.

  1. Karakter dizilerini de sıralayabilir miyim?

Evet, std::string veya char dizilerini de sıralayabilirsiniz.

  1. Neden bool döndürmeliyim?

Karşılaştırıcı fonksiyon, iki elemandan hangisinin önce gelmesi gerektiğini true/false ile belirtir.

  1. std::sort() neden kararlı değil?

Aynı değere sahip elemanların sırası korunmaz. Bu yüzden kararlılık gerekiyorsa std::stable_sort() önerilir.


🏁 Sonuç

Bu rehberde, C++ std::sort() fonksiyonunu temelden ileri seviyeye kadar inceledik. Artan, azalan veya özel kurallara göre sıralama yapabilir; lambda ifadeleriyle özelleştirebilirsiniz. Introsort algoritması sayesinde sıralamalarınız hızlı, güvenilir ve esnek olacaktır.

🚀 Rabisu Bulut platformunda C++ projelerinizi hemen deneyin ve performans farkını gözlemleyin.

yaml