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
| Özellik | Açıklama |
|---|---|
| Algoritma | Introsort (Quick Sort + Heap Sort + Insertion Sort kombinasyonu) |
| Ortalama Karmaşıklık | O(N log N) |
| En Kötü Durum | O(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)
- 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.
- 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.
- Karakter dizilerini de sıralayabilir miyim?
Evet, std::string veya char dizilerini de sıralayabilirsiniz.
- Neden bool döndürmeliyim?
Karşılaştırıcı fonksiyon, iki elemandan hangisinin önce gelmesi gerektiğini true/false ile belirtir.
- 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