Birincisi, bir tanım, çünkü oldukça önemli: Kararlı bir sıralama , öğeleri aynı anahtarlarla yeniden düzenlememeyi garanti eden bir sıralamadır.
öneriler:
Hızlı sıralama: Sabit bir sıralama ve ortalama vaka performansına ihtiyacınız olmadığında, en kötü vaka performansından daha önemlidir. Hızlı sıralama ortalama O (N log N), en kötü durumda O (N ^ 2) 'dir. İyi bir uygulama, özyineleme için yığın alanı şeklinde O (log N) yardımcı depolamayı kullanır.
Birleştirme sıralaması: Kararlı bir O (N log N) sıralamasına ihtiyacınız olduğunda, bu tek seçeneğinizle ilgilidir. Bunun tek dezavantajı, O (N) yardımcı alanı kullanması ve hızlı bir sıralamadan biraz daha büyük bir sabite sahip olmasıdır. Bazı yerinde birleştirme türleri vardır, ancak AFAIK bunların hepsi O (N log N) 'den daha kararlı veya daha kötü değildir. Yerinde sıralanan O (N log N) bile, düz eski birleştirme türünden çok daha büyük bir sabite sahiptir ve kullanışlı algoritmalardan daha teorik meraklardır.
Yığın sıralaması: Sabit bir sıralamaya ihtiyacınız olmadığında ve ortalama durum performansından daha kötü durum performansına daha fazla önem verdiğinizde. O (N log N) olması garanti edilir ve O (1) yardımcı alan kullanır, yani çok büyük girişlerde beklenmedik bir şekilde yığın veya yığın alanınız tükenmez.
Introsort: Bu, hızlı sıralamanın O (N ^ 2) en kötü durumunda dolaşmak için belirli bir özyineleme derinliğinden sonra yığın sıralamasına geçen hızlı bir sıralamadır. Garantili O (N log N) performansı ile ortalama hızlı bir sıralama elde ettiğiniz için, neredeyse her zaman sade eski bir hızlı sıralamadan daha iyidir. Muhtemelen bunun yerine bir yığın sıralaması kullanmanın tek nedeni, O (log N) yığın alanının pratik olarak önemli olduğu ciddi şekilde bellek kısıtlı sistemlerde olmasıdır.
Ekleme sıralaması : Hızlı sıralama veya birleştirme sıralamasının temel durumu da dahil olmak üzere N'nin küçük olacağı garanti edildiğinde. Bu O (N ^ 2) olsa da, çok küçük bir sabiti vardır ve kararlı bir çeşittir.
Kabarcık sıralaması, seçim sıralaması : Hızlı ve kirli bir şey yaptığınızda ve bir nedenden dolayı standart kütüphanenin sıralama algoritmasını kullanamazsınız. Bunların aşırı yerleştirme türüne sahip olmasının tek avantajı uygulanması biraz daha kolay olmasıdır.
Karşılaştırılmayan türler: Bazı oldukça sınırlı koşullar altında O (N log N) bariyerini kırmak ve O (N) cinsinden sıralamak mümkündür. İşte denemeye değer bazı durumlar:
Sayma sıralaması: Sınırlı bir aralığa sahip tam sayıları sıralarken.
Radix sıralaması: Log (N) K'den önemli ölçüde daha büyük olduğunda, burada K sayı tabanı basamak sayısıdır.
Kepçe sıralaması: Girişinizin yaklaşık olarak eşit olarak dağıtıldığını garanti edebildiğinizde.