Sıralama ve Bölümleme: sort, stable_partition
Kapsayıcıları std::sort ve std::stable_partition ile sıralayın ve bölümlere ayırın
Sıralama ve Bölümleme: sort, stable_partition, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
std::sort
Genel amaçlı temel sıralama algoritmasıdır. Ortalama karmaşıklığı O(N log N) değerindedir. Yerinde çalışır. Kararlı olması garanti edilmez.
#include <algorithm>
std::vector<int> v = {3, 1, 4, 1, 5, 9, 2, 6};
std::sort(v.begin(), v.end());
// v is sorted ascendingÖzel Karşılaştırıcı
Başka ölçütlere göre sıralamak için bir karşılaştırıcıyı (lambda veya işlev nesnesi) sort işlevine geçirin.
std::sort(v.begin(), v.end(),
[](int a, int b) { return a > b; }); // descendingÖzel Türleri Sıralama
Belirli üyeleri karşılaştıran bir karşılaştırıcı sağlayın veya tür üzerinde operator< tanımlayın.
struct Person { std::string name; int age; };
std::vector<Person> people;
std::sort(people.begin(), people.end(),
[](const Person& a, const Person& b) { return a.age < b.age; });std::stable_sort
sort ile aynıdır, ancak eşit öğelerin göreli sırasını korur. Biraz daha yavaştır (genellikle O(N log^2 N) ek bellek kullanır).
std::partial_sort
En küçük k öğeyi ilk sıraya yerleştirir (sıralı olarak). Kalan öğelerin sırası belirtilmemiştir. Yalnızca ilk k öğeye ihtiyacınız olduğunda tam sıralamadan daha hızlıdır.
std::vector<int> v = {5, 2, 8, 1, 9, 3};
std::partial_sort(v.begin(), v.begin() + 3, v.end());
// first 3 elements are the smallest, sortedstd::nth_element
nth konumundaki öğe, aralık tamamen sıralanmış olsaydı bulunacağı konumda olacak şekilde bölümlere ayırır. Önündeki her öğe bundan küçük veya eşittir; arkasındaki her öğe bundan büyük veya eşittir. Ortalama karmaşıklığı O(N) değerindedir.
std::nth_element(v.begin(), v.begin() + 2, v.end());
// v[2] is the 3rd smallest elementstd::is_sorted
Bir aralığın zaten sıralı olup olmadığını denetler.
if (std::is_sorted(v.begin(), v.end())) {
std::cout << "already sorted";
}std::partition
Bir aralığı, bir koşulu sağlayan öğeler öne gelecek şekilde yeniden düzenler. Koşulu sağlamayan ilk öğeye bir yineleyici döndürür. Kararlı değildir.
std::vector<int> v = {1, 2, 3, 4, 5};
auto pivot = std::partition(v.begin(), v.end(),
[](int x) { return x % 2 == 0; });
// even numbers come first, then oddstd::stable_partition
partition gibidir, ancak her grubun içindeki göreli sırayı korur.
Birden Çok Anahtara Göre Sıralama
Önce birincil anahtarı, birincil anahtarlar eşitse ikincil anahtarı karşılaştıran bir karşılaştırıcı kullanın.
std::sort(people.begin(), people.end(),
[](const Person& a, const Person& b) {
if (a.age != b.age) return a.age < b.age;
return a.name < b.name;
});Sıralı Aralıklarda İkili Arama
Sıralama yapıldıktan sonra O(log N) karmaşıklıklı aramalar için std::lower_bound, std::upper_bound ve std::binary_search kullanın.
Hızlı Kontrol
Sıralama sonrasında eşit öğelerin göreli sırasını hangi algoritma korur?
Özet
Genel sıralama için std::sort, eşit öğelerin sırası önemli olduğunda std::stable_sort, ilk k öğe için std::partial_sort, seçim yapmak için std::nth_element, gruplama için de std::partition/std::stable_partition kullanın.
Sıkça Sorulan Sorular
“Sıralama ve Bölümleme: sort, stable_partition” dersi ücretsiz mi?
Evet — “Sıralama ve Bölümleme: sort, stable_partition” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Sıralama ve Bölümleme: sort, stable_partition” dersinde ne öğreneceğim?
Kapsayıcıları std::sort ve std::stable_partition ile sıralayın ve bölümlere ayırın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Sıralama ve Bölümleme: sort, stable_partition” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Değiştirmeyen Algoritmalar: find, count, all_of
- Değiştiren Algoritmalar: transform, copy_if, replace
- Sıralama ve Bölümleme: sort, stable_partition
- Sayısal Algoritmalar: accumulate, reduce, transform_reduce