Bubble Sort ve dük Sort: Daha Verimli Nedir?
Geliştiriciler türleme algoritmaları çalışmaya başladığında, iki isim kaçınılmaz olarak ortaya çıkıyor: Sort ve bayion Sort. Her ikisi de temel, daha gelişmiş tekniklere hizmet eden karşılaştırma tabanlı algoritmaların temel, taşların daha ilerici tekniklere sahip olması için adım atılması. Basitliğe rağmen, onlar arasında seçim yapmak, öncelikle bir pedagojik bir araç olarak kalırken.
Bubble Sort in Samantha
Bubble Sorti, her geçişle listenin sonuna kadar en basit tür algoritmaların biridir. Listeyi defalarca takip eder ve bunları yanlış sıraylalarsa değiştirir.
Algoritma Adımları
- Dizinin başlangıcında başlayın.
- İlk iki elementle karşılaştırın. İlki ikincisinden daha büyükse, onları takas eder.
- Sonraki çifte taşınır ( 2 ve 3) ve karşılaştırmayı ve olası değişimi tekrarlayın.
- Tüm dizi için bu süreci devam edin. Tam bir geçişten sonra, en büyük element son konuma taşınacaktır.
- Geçin tekrarı, ancak sonraki her geçiş daha önce bir elementi durdurabilir çünkü serinin kuyruğu zaten sıralanmıştır.
- Tamamlanan bir geçiş herhangi bir takas olmadan gerçekleşirse, dizi sıralanır ve algoritma erken sona erer.
Bu erken sonlandırma optimizasyonu genellikle temel uygulamalarda göz ardı edilir, ancak algoritma tam olarak silinen bir listedir:2. ))))Katılımlar ve takaslar.
Zaman ve Uzay Kompleksi
- [FONT:0]Worst-case time:[Dönetici: 1) O(n2) – serinin ters sırayla gerçekleştiğinde gerçekleşir.
- [FONT:0]Average-case time:[Dönemli O(n2) – nested döngüler performans gösterdiğinden dolayı -).
- [FONT:0) En iyi durumda zaman: [Dönemli: 1) O(n) – erken sonlandırma optimizasyonu ve bir tür dizi.
- [FONT:0) Uzay karmaşıklığı: [Dönetici: [Dönetici: 1) - sadece sabit bir bellek miktarı kullanarak bir çeşit sıra (gele takas için tek geçici değişken).
Bubble Sorti bir alg.D:0))[[Dönetici: 1) Algoritma, eşit elementlerin orijinal göreceli siparişlerini koruduğu anlamına gelir. Bu özellik, belirli uygulamalar için önemli olabilir, ancak istikrar nadiren verimsiz bir faktördür.
Kur'an'a (ya da teorik olarak) ne zaman kullanılır
Eğitim bağlamları dışında, Bubble Sort neredeyse hiç en iyi seçimdir. sadece avantajları aşırı basit ve girişin zaten bir geçişte sıralandığını tespit etme yeteneği vardır. SomeurFLT:0)Wikipedia article on Sort, kodun nerede olduğu küçük görevler için bilgisayar grafiklerinde kullanım olduğunu notlar, ancak orada bile, breion Sort sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık gösterir.
Kesion Sort in Samantha
Silion Sorti, insanların elle tür eşyaları, bir oyun kartlarını düzenleme gibi taklit eder.Bu yaklaşım, özellikle de verilerin kısmen sipariş edildiği zaman bir numaralı elementi bir kez tekrar tekrar ele geçirerek doğru konuma koyar.
Algoritma Adımları
- İlk elementi zaten sıralanmış olarak düşünün (Tek bir uygulama listesi önemsiz bir şekilde sıralanır).
- Bir sonraki elementi, değersiz porsiyondan alın.
- Bu arada, parçalanmış parçalarla karşılaştırın, sağdan sola hareket edin.
- Mevcut elementten daha büyük olan tüm sorted elementleri doğruya doğru bir konumdan geçiyor.
- Mevcut elementi boş yere koyun.
- Tüm dizi işlenmiş olana kadar 2-5 tekrar adımları.
Bubble Sort'in aksine, komponion Sort gereksiz takaslar gerçekleştirmiyor. Bunun yerine, elementleri değiştiriyor, bu genellikle daha verimli çünkü çift başına birden fazla geçici görev yükünden kaçınıyor. Dahası, ion Sort özellikle de neredeyse sıralamada iyi çalışıyor: Her yeni element sadece doğru pozisyonu bulmadan önce birkaç karşılaştırmaya ihtiyaç duyuyor.
Zaman ve Uzay Kompleksi
- [FONT:0]Worst-case time:[Dönetici: 1 ) O(n2) – dizinin ters sırayla sıralandığı zaman.Her bir eklenti, tüm elementleri sıralanmış kısımda değiştirme gerektirir.
- [FONT:0]Average-case time:[Dönem: 1) [Dönem: 2) – ama pratikte Sorting'den daha düşük sabit bir faktörle.
- [FONT:0) En iyi durumda zaman: [Dönder: 1) O(n) – dizinin zaten sıralandığı zaman. Her yeni element sadece bir kez karşılaştırır ve değişmemelidir.
- [FONT:0) Uzay karmaşıklığı: [Dönetici: [Dönetici: 1) - Sürekli ekstra bellekle yer.
Addion Sort aynı zamanda [[0)) <0)[[Dönetici: eşit anahtarların göreceli siparişini korumak.In adaptive nature - performans daha sıralamak hale gelir - küçük veri setleri için pratik bir seçim yapar ve Timsort gibi daha sofistike algoritmaların alt kısmından oluşur.
Gerçek-Dünya İlişkisi
Addion Sort eskisinden çok uzaktır. Birçok modern programlama dili, küçük diziler için iç içe kullanır. Örneğin, Python'un [[0) Timsort kullanır, ki bu da hafızaya giren küçük bir koşu için sıralanır. Benzer şekilde, Java'sENFLT:1, ilkeller için çift-Pivot Quicksort kullanır, ancak küçük diziler için sıraya geri dönebilirsiniz.
Head-to-Head Verimliliği Karşılaştırma
Her iki algoritma da O(n2) en kötü zaman karmaşıklığı paylaşır, ancak pratik performansları önemli ölçüde farklılık gösterir. Karşılaştırma ve hareketlerin sayısında, giriş emrine uyum sağlar ve değişime karşı takas maliyeti.
Operasyon Sayısı
[FONT=0}Bubble Sort[DÜDÜT:1]Her zaman doğruyu gerçekleştirir:2.[Dönetici:0)[Dönetici:0)[Dönemli:0|Dönemli|Dönemli:2|Dönemli:2|Dönemli) Bu, 1000 elementin ters listesini gerçekleştirir, Sorter ~499,500 takas eder, her biri üç hafızayı içerir.
2.Kaplaklar (Dönder) <0) Insertion Sort[değiştir | kaynağı değiştir] En kötü durumdakiler de performans gösterir.[Dönetici:2}[Dönetici:0}[Dönetici:0|Dönetici|Dönetici|s/tr|s)[değiştir | kaynağı değiştir]
Adaptif Davranış
1.Kaplak Sorti: Dizi zaten sıralanırsa, sadece kısa geçişler yapılır.(#0)[DÜye Olmayanlar ve sıfırlar.Eğer dizi neredeyse sıralanırsa, sadece birkaç elementin eklemek gerekir ve bu eklentiler genellikle kısa kaydırılır. Sorter, en kısa sürede sona erir (örneğin, 3 )
Memory Locality ve Caching
Modern CPU mimarisi iyi önbellek davranışından yararlanır. Bu algoritmaların seçimi, sorunun kısıtlarına bağlıdır: Ancak, bu durumlarda bile, komponion Sort neredeyse her zaman minimum kod karmaşıklığı artışı ile daha iyi bir düşüşe neden oluyor. Kullanım vakaların daha ayrıntılı bir tartışma için, [[0)PereksforGeeks makalesini komponion Sort[[DFLT:1) örnekler ve varyasyonlar sağlar. Sayılarda karşılaştırmayı korumak için, Python'da her iki algoritmayı da uygulayan tipik bir dizüstü bilgisayar üzerinde bir deney düşünün (bölgedeki bağıt davranışların diller arasında tutarsa). 10.000 rastgele tamsayılar: 50.000 elementle, Sort tamamen pratik ( dakikalar) olur, oysa Addion Sort hala birkaç saniye içinde tamamlar. neredeyse sıralanmış veriler (örneğin, sipariş edilen elementlerin sadece% 0.1'i), Addion Sort, algoritma davranışlarının görsel karşılaştırmasına izin verir. Big O notation asymptotic sınırları sağlarken, aşağıdaki iyi noktaları göz önünde bulundurun: En kötü durumda, her iki algoritma da ortalama olarak karşılaştırır:0))[[Dönetici:2}).2 kıyaslamalar genellikle tekrarlanır (en fazla bir şekilde tam karşılaştırmalar yapılır). Bahsedildiği gibi, Sort'in değişimi üç atama gerektirir. addion Sort'in değişimi, element başına bir atama gerektirir. Ek olarak, son ekleme bir tane daha atama gerektirir.For a wrong-sorted list ofİLFLT:0)n) elementler: Böylece, Shinion Sort en kötü durumdaki en iyi üçüncü bir bellek yazında performans gösterir.Bu doğrudan gerçek dünya hızına çevirir. Polen Sorti kısmen veri üzerinde öne çıkıyor çünkü inverss sayısı - ortalama olarak çıkan elementlerin çiftleri - doğrudan koşu zamanı ile ilişkilendirilir.Returns sayısı, bu tür değişim sayısı = 3 ).For random data, there are about.)))). Her iki algoritma da sadece O(1) ek bellek gerektiren bir tür durumda. Her ikisi de istikrarlı, yani birden fazla anahtarla bir liste sıralandığında, eşit anahtarların göreceli siparişi değişmemiş. Stability is important for applications like to multiple columns (e.g., sorting by last name then first name). ancak, ne algoritma genellikle büyük ölçekli sabit bir sıralama için kullanılır, çünkü O(n2) zaman büyük bir istikrar için yavaş kalır. Her iki algoritma da yıllar boyunca incelendi: Bu varyantlar nadiren pratikte kullanılır; çoğunlukla akademik kalırlar. Bu varyasyonlara rağmen, temel komponion Sorti küçük veya neredeyse sıralanmış veriler için go-to kalır. Herhangi bir veri kümesi birkaç yüz elementten daha büyük, ne Sort ne de bayat Sorti uygun. O ölçekde, O(n log n) Quicksort, Merge Sort veya Heap Sort - 10. boyut için bile, O(n2) ve O(n log n) arasındaki fark, örneğin, Quicksort ile 1000 elementler 0.002 saniye sürebilir, oysa siyon Sorter ~0.2 saniye alır. Dahası, hafızaya sığmayan son derece büyük veri setleri için, dış tür algoritmaları ( Merge Sorti varyantları gibi) gereklidir. Böylece, Sorting ve Addion Sortinin pratik uygulanabilirliği küçük veya giriş neredeyse sıralanmıştır. Her iki algoritmanın ayrıntılı bir incelemeden sonra, karar açıktır: Ekleion Sorti, basit bir O(n2) türün kabul edilebilir olduğu senaryoların büyük çoğunluğu için daha verimli ve pratik bir algoritmadır. Sortere bir öğretim aracı olarak, naif yaklaşımların nasıl verimsizliğe yol açabileceğini genişletin. Küçük bir problem için bir tür çizilmeye çalışan geliştiriciler, kategorik tasarıma ve büyük O'nun ötesindeki sabit faktörlerin daha derin bir takdirine ihtiyaç duyan programcılara varsayılan olarak uyum sağlamaları gerekir. Daha fazla okuma için, danışma:0)Khan Akademisi Algoritmas kursu[Dönetici: 1), yeni başlayan bir karmaşıklığın belirlenmesi için başlangıç dostu bir giriş.En İyi Kullanım Vakaları
Bubble Sorti Kabul Edilebilir Olabilir
Ne zaman oynanır Shines
Empirical Performans: Basit Bir Benchmark
Büyük O'nun Ötesinde Kompleks Analiz
Karşılaştırma Sayısı
Assignments sayısı
Data Dağıtımının Etkisi
Memory Footprint ve Stability
Variants ve Optimizasyonlar
Bubble Sort Variants
Addion Sort Variants
Her ikisinden de kaçınırken
Sonuç: siyon Sorti Neredeyse Her Zaman Kazanıyor