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ı

  1. Dizinin başlangıcında başlayın.
  2. İlk iki elementle karşılaştırın. İlki ikincisinden daha büyükse, onları takas eder.
  3. Sonraki çifte taşınır ( 2 ve 3) ve karşılaştırmayı ve olası değişimi tekrarlayın.
  4. 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.
  5. Geçin tekrarı, ancak sonraki her geçiş daha önce bir elementi durdurabilir çünkü serinin kuyruğu zaten sıralanmıştır.
  6. 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ı

  1. İlk elementi zaten sıralanmış olarak düşünün (Tek bir uygulama listesi önemsiz bir şekilde sıralanır).
  2. Bir sonraki elementi, değersiz porsiyondan alın.
  3. Bu arada, parçalanmış parçalarla karşılaştırın, sağdan sola hareket edin.
  4. Mevcut elementten daha büyük olan tüm sorted elementleri doğruya doğru bir konumdan geçiyor.
  5. Mevcut elementi boş yere koyun.
  6. 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.

En İyi Kullanım Vakaları

Bu algoritmaların seçimi, sorunun kısıtlarına bağlıdır:

Bubble Sorti Kabul Edilebilir Olabilir

  • [FONT:0]Eğitimsel gösteriler[[Dönetici: 1)[Döneticileri) – onun basitliği yeni başlayanlara türleme kavramları yardımcı olur.
  • [FONT:0) Tamamen küçük veri setleri[Dönetici:0) [FONTT:1] (≤10 element) performans farklılıklarının ne kadar uygun olduğu konusunda.
  • [FONT:0) Ne zaman istikrar ve yerinde sıralama gereklidir[Dönetici:0) ve kod basit transumps verimliliğini kodlayın.
  • [FONT=0)Hardware uygulamaları [[Dönlendirme işlemi paralel olarak gerçekleştirilebileceği yer[Döneticileri)[değiştir | kaynağı değiştir]

Ancak, bu durumlarda bile, komponion Sort neredeyse her zaman minimum kod karmaşıklığı artışı ile daha iyi bir düşüşe neden oluyor.

Ne zaman oynanır Shines

  • [FONT:0)Küçük diziler[[Dönetici:0) (≤50 element) - birçok standart kütüphane düşük yüksek yüksek çözünürlük nedeniyle sıralama için sıraya geçer.
  • [FONT:0) Neredeyse sıralanmış veriler[[Dönemli:0) – O (n) zamanında birkaç mutasyondan sonra siparişi korumak için ideal hale getirmek.
  • [FONT:0)Online sıralama[[[Dönetici: 1)) - elementler artarak ve bir tür listeye eklenmelidir, siyon Sort doğaldır.
  • [FONT:0]Bir bina bloğu olarak [Dönetici: 1) Timsort gibi hibrit algoritmalarda, komponion Sort küçük çalışır.
  • [FONT:0]Embedded sistemleri[[Dönetici: 1)[Dönetici sıkı ve veri setleri önbellekte uygun olduğunda,

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.

Empirical Performans: Basit Bir Benchmark

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:

  • Bubble Sort - 2.5 saniye
  • Addion Sort - 0.9 saniye

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.

Büyük O'nun Ötesinde Kompleks Analiz

Big O notation asymptotic sınırları sağlarken, aşağıdaki iyi noktaları göz önünde bulundurun:

Karşılaştırma Sayısı

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).

Assignments sayısı

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:

  • Bubble Sort: - (3 * )DÜDÜ:0)[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜNÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜ: 1.Bölüm/TRİYE)
  • Addion Sort: ([[DÜ:0))[DÜDÜT 1:0))) = [FONT=2|0|0|[DÜye Olmayanlar:2|0))[DÜyeler ))

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.

Data Dağıtımının Etkisi

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.)))).

Memory Footprint ve Stability

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.

Variants ve Optimizasyonlar

Her iki algoritma da yıllar boyunca incelendi:

Bubble Sort Variants

  • [FONT=0)Cocktail Shaker Sort[[Dönder: 1)))[Kaplak:0)Kocktail Shaker Sort[[Dönder: 1 ) – aynı zamanda Biyöner Sorter Sort olarak da bilinir.
  • [FONT=0)Comb Sort[Dönetici:0)[Döneticileri arasındaki bir boşluk tanıtılır, bunu Shell Sortinin daha basit bir versiyonuna etkili bir şekilde çevirmektedir. Ortalama performans geliştirir, ancak hala küçük boyutlardaki sıralamanın kısası düşer.

Bu varyantlar nadiren pratikte kullanılır; çoğunlukla akademik kalırlar.

Addion Sort Variants

  • [FONT=0)Binary ion Sort[[Dönetici] - karşılaştırma noktası bulmak için ikili arama kullanır, O(n)'dan O'ya kıyasla karşılaştırma sayısını azaltır (log n) persetion. Ancak, değişim sayısı O(n), o kadar genel zaman karmaşıklığı O(n2) kalır.
  • [FONT:0)Shell Sort[DÜDÜT:1) – genelleştirilmişler, uzak elementlerin karşılaştırmalarına izin vererek sıra dışı performans (O(n log n) bazı boşluk dizilerinde daha iyi olur ve orta büyüklükteki diziler için pratik bir algoritmadır.

Bu varyasyonlara rağmen, temel komponion Sorti küçük veya neredeyse sıralanmış veriler için go-to kalır.

Her ikisinden de kaçınırken

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.

Sonuç: siyon Sorti Neredeyse Her Zaman Kazanıyor

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ş.