hızlı sıralama Python

Python işlevleri ve meth

Python QuickSort, bir pivot öğe seçer ve bir dizinin öğelerini iki yeni dizi< olarak böler em>s. Özetten daha yüksek sayılar bir dizi içine girer; pivottan daha düşük sayılar diğerine gider. Her bir dizi sıralanır ve ardından tüm diziler birleştirilir.

Programlamada bir listeyi sıralamak için kullanabileceğiniz birçok sıralama algoritması vardır. Python yerleştirme sıralamaları var, balon çeşitleri ve daha fazlası. QuickSort, en yaygın türlerden biridir.

Bu kılavuzda QuickSort'ların ne olduğu ve nasıl çalıştıkları hakkında konuşacağız. Nasıl uygulanacağını öğrenebilmeniz için bir Python QuickSort örneğini inceleyeceğiz.

Daha fazla uzatmadan başlayalım!




Python QuickSort nedir?

Python QuickSort algoritması, bir diziyi alt dizilere böler. Bu algoritma, listedeki her bir öğeyi sıralamak için bu alt dizileri özyinelemeli olarak çağırır. Bir alt dizinin içeriği, yeni bir alt diziye taşınmayan bir pivot öğe tarafından belirlenir.

QuickSort algoritması böler ve fetheder. Bu, bir listeyi sıralama görevinin birkaç alt göreve bölündüğü anlamına gelir. Sıralamanın sonunda, bu alt görevlerin sonuçları, sıralanmış bir liste döndürmek için bir araya gelir.

Bir Hızlı Sıralamada, alt görev, her alt liste için bir pivot ayarlar ve öğeleri, değerlerine göre sıralamaktır. pivot.




Python QuickSort'u Ne Zaman Kullanmalıyım?

Zaman karmaşıklığı önemli olduğunda QuickSort yararlıdır. Bunun nedeni, QuickSort'un diğer algoritmalara göre daha az bellek alanı kullanması ve bu da onlara verimlilik artışı sağlamasıdır.

Katılımcıların %81'i, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda kendilerini daha güvende hissettiklerini belirtti. Bugün bir eğitim kampı ile eşleştirin.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan daha az zaman harcadı.

Yalnızca bir Hızlı Sıralama kullanmalısınız. Python özyineleme hakkında bilginiz varsa. Bunun nedeni, QuickSort algoritmasının özyinelemeli işlevlere bağlı olmasıdır.

Hızlı Sıralama, daha küçük dizilerde birleştirme sıralamasından daha verimlidir. Ancak, daha büyük veri kümelerinde, araya ekleme sıralama veya birleştirme sıralama daha hızlı olabilir.





Bir QuickSort Nasıl Çalışır?

Bir QuickSort, pivot işlevi görecek bir öğe seçer. Bu, bir listedeki herhangi bir öğe olabilir. Bu eğitim için , listedeki son öğeyi seçeceğiz (3).

< /tr>
8

td>
45213

Bir QuickSort, listedeki öğeler arasında döngü yaptığımızda, pivot değerini her sayıyla karşılaştırır. pivot; aksi takdirde, sayıyı pivottan önce taşırız:

2 13854
tbody>

3 değeri listemizde aşağı kaydırıldı. Tüm öğeler 3 m'den küçük soluna eğildi; üçten büyük tüm değerler sağına taşındı.

Python dizimiz iki yarıya bölünmüştür: pivottan büyük öğeler ve öğeler bir pivottan daha az.

Bu süreç başladığında, iki yarının her birinde yeni bir pivot başlar. Bu pivot ayrı olarak başlar ve yukarıdakiyle aynı algoritmayı kullanır. İlk olarak, her listedeki son değere eşit bir pivot değeri belirleyeceğiz:

Ardından, pivottan büyük tüm değerleri pivotun sağına taşıyacağız. Pivottan daha küçük tüm değerleri sola taşırız.

Pivot One

İkinci Özet

12
485

Bu işlem, biz listemizi sıralayana kadar devam eder:

< td>
 
İlk Kez

güçlü>
12
4 85
İkinci Kez
< güçlü>1

85





587t?/
Üçüncü Zaman



8

Son dizimiz şuna benziyor:

1< /td>23458



Python QuickSort Örneği

QuickSort'un iki işleve ihtiyacı vardır: bir pivot işlevi ve bir QuickSort işlevi.

Bölüm işleviyle başlayalım. Bu, diziyi pivot öğesinin değerine göre bölümlendirir veya hazırlar.

Bölüm işlevimiz:

  1. Pivot öğesini seçin
  2. Tüm öğeleri pivotun sağındaki pivottan daha büyük taşıyın
  3. Tüm öğeleri pivotun solundaki pivottan daha küçük taşıyın

QuickSort Python Programı
  • Bu algoritmayı uygulayan bir program yazalım:

    def hazırla(numbers, low , yüksek): pivot = sayılar[yüksek] öğe = düşük - aralıktaki i için 1 (düşük, yüksek): if sayılar[i] <= pivot: öğe = öğe + 1 (sayılar[öğe], sayılar[i] ) = (sayılar[i], sayılar[öğe]) (sayılar[öğe + 1], sayılar[yüksek]) = (sayılar[yüksek], sayılar[öğe + 1]) öğeyi döndür + 1

    Önce bir pivot eleman seçiyoruz. Bu, listemizdeki en yüksek sayıya eşittir.


    Sonra, bir Python for döngüsü kullanarak listedeki tüm öğeler arasında dolaşıyoruz. pivota eşittir, pivotun soluna taşınır. Aksi takdirde pivotun sağına gider.

    Python işlevimiz yeni yüksek değeri döndürür. Yeni yüksek değer, madde + 1'e eşittir.

    Ardından, algoritmamızı çalıştırmamız gerekir. Bunu ayrı bir fonksiyon yazarak yapabiliriz:

    "Python.Engineering hayatıma en çok ihtiyacım olduğu anda girdi ve hızlı bir şekilde bir bootcamp ile eşleşmeme yardımcı oldu. Mezun olduktan iki ay sonra, hayattaki değerlerim ve hedeflerime uygun hayalimdeki işi buldum!"

    Venus, Rockbot'ta Yazılım Mühendisi

    < p>Bu fonksiyon, “low” değerinin “high” değerinden küçük olup olmadığını kontrol eder. Eğer öyleyse sıralamamız devam edebilir. Aksi takdirde sıralamamız durur. Eğer sıralamamız durursa, elimizde var demektir. listeyi sıraladı.

    Sonra, fonksiyonumuz prepare() yöntemini çağırır. Bu, pivot için bir işaretçi tanımlar ve öğeleri doğru yerlerine taşır.

    Fonksiyonumuz daha sonra iki kez quick_sort() yöntemini çağırır.İlkinde, pivotun solundaki öğelerde QuickSort çalıştırırız.İkinci kez, öğelerde QuickSort'u çalıştırırız. Bu nedenle, fonksiyonumuz kendini çağırdığı için özyinelemelidir.

    Bu, listedeki her öğe sıralanana kadar devam eder.

    Bir Ana Yöntem Yazma

    < p>Bunun için bir liste tanımlayan bir ana program yazalım. rt:

    değerler = [8, 4, 5, 2, 1, 3] total_values ​​= len(değerler) ) quick_sort(values, 0, total_values ​​- 1) print(values)

    Önce sıralanacak değerlerin bir listesini belirliyoruz. Değer listemizin uzunluğunu hesaplamak için Python len() yöntemini kullanıyoruz. Ardından, quick_sort() yöntemini çağırırız.


    Sıralamak istediğimiz sayılar olarak “değerleri” daha sonra düşük sayı olarak 0 iletiyoruz. “değerlerin” eksi 1 uzunluğu belirttiğimiz yüksek değerdir. Yüksek değer, eksi 1 değerlerinin uzunluğudur, çünkü listedeki ilk öğenin dizin numarası 0'dır.

    Programımızı çalıştırmayı deneyelim:

    [1, 2, 3, 4, 5, 8]

    Kodumuz sıralanmış bir liste döndürür! Biz yaptık. Kendinizi biraz şımartın. QuickSort'u anlamak veya uygulamak kolay değildir.




    Karmaşıklığa Genel Bakış

    Ortalama olarak, bu algoritma şu anda çalışır: O(n* log n). Bu, pivot eleman en büyük veya en küçük eleman olmadığında ve pivot eleman orta elemana yakın olmadığında olur.

    Hızlı Sıralamanın en kötü durumu vardır. O(n2)'nin pleksisitesi. Bu, pivot olarak seçilen öğe en büyük veya en küçük öğe olduğunda oluşur. Bu durumda, pivot öğe her zaman sıralanmış bir dizinin sonunda olacaktır. Bu, bir dizi gereksiz alt dizi yaratacaktır.

    Bu algoritma için en iyi durum karmaşıklığı O(n* log n)'dir. Bu, pivot öğe ortadaki öğeye eşit veya ortadaki öğeye yakın olduğunda gerçekleşir.

    Algoritma karmaşıklığı hakkında daha fazla bilgi edinmek için Big O Notation.




    Sonuç

    Python QuickSorts, bir listeyi daha sonra sıralanacak olan daha küçük listelere bölmek için özyinelemeyi kullanır. Her liste bir pivot eleman etrafında sıralanır. Pivottan daha büyük olan öğeler sağına taşınır; daha küçük öğeler pivotun soluna taşınır.

    En iyi Python öğrenme kaynakları, çevrimiçi kurslar ve kitaplar hakkında rehberlik için kapsamlı Python Nasıl Öğrenilir kılavuzu.





  • hızlı sıralama Python: StackOverflow Questions

    Tutorials