logo

Python'da Eklemeli Sıralama

Ekleme sıralaması, önceki kabarcık sıralama algoritmasından daha basit ve daha etkili bir algoritmadır. Ekleme sıralama algoritması kavramı, oyun kartını belirli bir karta göre sıraladığımız kart destesine dayanmaktadır. Pek çok avantajı vardır ancak veri yapısında pek çok etkili algoritma mevcuttur.

Kart oynarken kartların ellerini karşılaştırırız. Oyuncuların çoğu, hangi kombinasyonların ellerinde olduğunu hızlı bir şekilde görebilmek için kartları artan sırada sıralamayı sever.

json dosyası nasıl okunur

Ekleme sıralaması uygulaması kolay ve basittir çünkü genellikle başlangıç ​​programlama dersinde öğretilir. O bir yerinde Ve kararlı algoritma bu neredeyse sıralanmış veya daha az öğe için daha faydalıdır.

Eklemeli sıralama algoritması, elemanları sıralamak için iç içe döngü kullandığından çok hızlı değildir.

Aşağıdaki terimleri anlayalım.

Yerinde ve sabitin anlamı nedir?

    Yerinde:Yerinde algoritma, koleksiyonun giriş boyutunu önemsemeden ek alan gerektirir. Sıralama işlemini gerçekleştirdikten sonra koleksiyondaki elemanların orijinal hafıza konumlarını yeniden yazar.Stabil:Kararlı, başlangıç ​​dizisindeki eşit nesnelerin göreceli sırasını yöneten bir terimdir.

Daha da önemlisi, ekleme sıralaması, dizi boyutunun önceden bilinmesini gerektirmez ve her seferinde bir öğeyi alır.

Ekleme sıralamasının en güzel yanı, sıralanacak daha fazla öğe eklememizdir; algoritma, tam sıralamayı gerçekleştirmeden bunları doğru yere yerleştirir.

Küçük (10'dan az) boyutlu dizi için daha verimlidir. Şimdi ekleme sıralamasının kavramlarını anlayalım.

Eklemeli Sıralama Kavramı

Dizi, ekleme sıralamasındaki iki parçaya neredeyse dağılmış durumda - Bir sıralanmamış kısım Ve sıralanmış parça.

Sıralanan kısım dizinin ilk elemanını, diğer sıralanmamış alt kısım ise dizinin geri kalanını içerir. Sıralanmamış dizideki ilk öğe, sıralanmış diziyle karşılaştırılır, böylece onu uygun bir alt diziye yerleştirebiliriz.

Sağ taraftaki değer sol taraftan küçükse tüm öğeleri hareket ettirerek öğelerin yerleştirilmesine odaklanır.

Tüm öğe doğru yere eklenene kadar bu tekrar tekrar gerçekleşecektir.

Aşağıdaki ekleme sıralamasını kullanarak diziyi sıralamak için ekleme sıralama algoritması kullanılır.

  • Listeyi iki bölüme ayırdım - sıralanmış ve sıralanmamış.
  • Verilen dizi üzerinde arr[1]'den arr[n]'ye yineleme yapın.
  • Geçerli öğeyi sonraki öğeyle karşılaştırın.
  • Geçerli öğe bir sonraki öğeden küçükse, önceki öğeyle karşılaştırın. Değiştirilen öğeye yer açmak için daha büyük öğelere bir konum yukarı taşıyın.

Aşağıdaki örneği anlayalım.

dikkate alacağız ilk eleman içinde sıralanmış dizi aşağıdaki dizide.

[10, 4, 25, 1, 5]

İlk adım 10 ekle sıralanmış alt diziye

[ 10 , 4, 25, 1, 5]

Şimdi sıralanmamış dizinin ilk elemanını alıyoruz - 4. Bu değeri yeni bir değişkende saklıyoruz sıcaklık Şimdi , 10>4'ün ardından 10'u sağa hareket ettirdiğimizi ve bunun daha önce saklanan 4'ün üzerine yazdığını görebiliriz.

[ 10 , 10, 25, 1, 5] (sıcaklık = 4)

Burada 4, sıralanmış alt dizideki tüm öğelerden daha küçüktür, bu nedenle onu ilk dizin konumuna yerleştiririz.

[ 4, 10, 25, 1, 5]

Sıralanan alt dizide iki öğemiz var.

Şimdi 25 sayısını kontrol edin. Bunu geçici belleğe kaydettik. değişken. 25>10 ve ayrıca 25>4 sonra üçüncü konuma yerleştirip sıralanan alt diziye ekliyoruz.

[ 4, 10, 25, onbeş]

Yine 1 numarayı kontrol ediyoruz. sıcaklık 1, 25'ten küçüktür. 25'in üzerine yazar.

[ 4, 10, 25, 25, 5] 10>1 sonra tekrar üzerine yazar

[ 4, 25, 10, 25, 5]

[ 25, 4, 10, 25, 5] 4>1 şimdi temp = 1 değerini koyuyoruz

[ 1, 4, 10, 25 , 5]

Artık sıralanan alt dizide 4 öğemiz var. 5<25 25 then shift to the right side and pass sıcaklık = 5 sol tarafa.

[ 1, 4, 10, 25 , 25] sıcaklık koyma = 5

Şimdi sadece temp değerini koyarak sıralanmış diziyi elde ediyoruz.

[1, 4, 5, 10, 25]

Verilen dizi sıralanır.

Uygulama

Eklemenin uygulanması nispeten kolaydır. Python'un tamsayı dizisini kullanarak uygulama yapacağız. Aşağıdaki örneği anlayalım -

Python Programı

img css hizalama
 # creating a function for insertion def insertion_sort(list1): # Outer loop to traverse through 1 to len(list1) for i in range(1, len(list1)): value = list1[i] # Move elements of list1[0..i-1], that are # greater than value, to one position ahead # of their current position j = i - 1 while j &gt;= 0 and value <list1[j]: list1[j + 1]="list1[j]" j -="1" return list1 # driver code to test above 5, 13, 8, 2] print('the unsorted list is:', list1) sorted insertion_sort(list1)) < pre> <p> <strong>Output:</strong> </p> <pre> The unsorted list is: [10, 5, 13, 8, 2] The sorted list1 is: [2, 5, 8, 10, 13] </pre> <p> <strong>Explanation:</strong> </p> <p>In the above code, we have created a function called <strong>insertion_sort(list1).</strong> Inside the function -</p> <ul> <li>We defined for loop for traverse the list from 1 to <strong>len(list1).</strong> </li> <li>In for loop, assigned a values of list1 in <strong>value</strong> Every time the loop will iterate the new value will assign to the value variable.</li> <li>Next, we moved the elements of list1[0&#x2026;i-1], that are greater than the <strong>value,</strong> to one position ahead of their current position.</li> <li>Now, we used the while to check whether the j is greater or equal than 0, and the <strong>value</strong> is smaller than the first element of the list.</li> <li>If both conditions are true then move the first element to the 0<sup>th</sup> index and reduce the value of j and so on.</li> <li>After that, we called the function and passed the list and printed the result.</li> </ul> <h2>Sorting Custom Objects</h2> <p>Python provides the flexibility to change the algorithm using a custom object. We will create a custom class and redefine the actual comparison parameter and try to keep the same code as the above.</p> <p>We would require to overload the operators in order to sort the objects in a different way. But, we can pass another argument to the <strong>insertion_sort()</strong> function by using the <strong>lambda</strong> function. The lambda function is a convenient when calling the sorting method.</p> <p>Let&apos;s understand the following example of sorting custom objects.</p> <p>First, we are defining the <strong>Point</strong> class:</p> <h3>Python Program</h3> <pre> # Creating Point class class Point: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return str.format(&apos;({},{})&apos;, self.a, self.b) def insertion_sort(list1, compare_function): for i in range(1, len(list1)): Value = list1[i] Position = i while Position &gt; 0 and compare_function(list1[Position - 1], Value): list1[Position] = list1[Position - 1] Position = Position - 1 list1[Position] = Value U = Point(2,3) V = Point(4,4) X = Point(3,1) Y = Point(8,0) Z = Point(5,2) list1 = [U,V,X,Y,Z] # We sort by the x coordinate, ascending insertion_sort(list1, lambda x, y: x.a &gt; y.a) for point in list1: print(point) </pre> <p> <strong>Output:</strong> </p> <pre> The points are in the sorted order (2,3) (3,1) (4,4) (5,2) (8,0) </pre> <p>Using the above code, we can sort the coordinate points. It will work for any type of the list.</p> <h2>Time Complexity in Insertion Sort</h2> <p>Insertion sort is a slow algorithm; sometimes, it seems too slow for extensive dataset. However, it is efficient for small lists or array.</p> <p>The time complexity of the insertion sort is - <strong>O(n<sup>2</sup>).</strong> It uses the two loops for iteration.</p> <p>Another important advantage of the insertion sort is that; it is used by the popular sorting algorithm called <strong>Shell sort.</strong> </p> <p>The auxiliary space in insertion sort: <strong>O(1)</strong> </p> <h2>Conclusion</h2> <p>Insertion sort is a simple and inefficient algorithm that has many advantages, but there are more efficient algorithms are available.</p> <p>In this tutorial, we have discussed the concept of the insertion sort and its implementation using the Python programming language.</p> <hr></list1[j]:>

Açıklama:

Yukarıdaki kodda adında bir fonksiyon yarattık. ekleme_sort(liste1). Fonksiyonun içinde -

  • Listeyi 1'den 1'e geçmek için for döngüsünü tanımladık. len(liste1).
  • For döngüsünde liste1'in değerleri atandı değer Döngü her yinelendiğinde, yeni değer değer değişkenine atanacaktır.
  • Daha sonra liste1[0…i-1]'in şu değerlerden büyük olan elemanlarını taşıdık: değer, mevcut konumlarının bir konum ilerisine.
  • Şimdi, j'nin 0'dan büyük veya eşit olup olmadığını kontrol etmek için while'ı kullandık ve değer listenin ilk elemanından daha küçüktür.
  • Her iki koşul da doğruysa ilk öğeyi 0'a taşıyınoj'nin değerini indeksleyin ve azaltın ve bu şekilde devam edin.
  • Daha sonra fonksiyonu çağırıp listeyi geçtik ve sonucu yazdırdık.

Özel Nesneleri Sıralama

Python, özel bir nesne kullanarak algoritmayı değiştirme esnekliği sağlar. Özel bir sınıf oluşturup gerçek karşılaştırma parametresini yeniden tanımlayacağız ve yukarıdaki kodun aynısını korumaya çalışacağız.

Nesneleri farklı bir şekilde sıralamak için operatörlere aşırı yükleme yapmamız gerekir. Ancak başka bir argümanı daha aktarabiliriz. ekleme_sort() işlevini kullanarak lambda işlev. Lambda işlevi, sıralama yöntemini çağırırken kullanışlıdır.

Özel nesneleri sıralamaya ilişkin aşağıdaki örneği anlayalım.

Öncelikle şunu tanımlıyoruz: Nokta sınıf:

Python Programı

 # Creating Point class class Point: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return str.format(&apos;({},{})&apos;, self.a, self.b) def insertion_sort(list1, compare_function): for i in range(1, len(list1)): Value = list1[i] Position = i while Position &gt; 0 and compare_function(list1[Position - 1], Value): list1[Position] = list1[Position - 1] Position = Position - 1 list1[Position] = Value U = Point(2,3) V = Point(4,4) X = Point(3,1) Y = Point(8,0) Z = Point(5,2) list1 = [U,V,X,Y,Z] # We sort by the x coordinate, ascending insertion_sort(list1, lambda x, y: x.a &gt; y.a) for point in list1: print(point) 

Çıktı:

 The points are in the sorted order (2,3) (3,1) (4,4) (5,2) (8,0) 

Yukarıdaki kodu kullanarak koordinat noktalarını sıralayabiliriz. Listenin her türü için işe yarayacaktır.

Eklemeli Sıralamada Zaman Karmaşıklığı

Ekleme sıralaması yavaş bir algoritmadır; bazen kapsamlı veri kümesi için çok yavaş görünüyor. Ancak küçük listeler veya diziler için etkilidir.

Ekleme sıralamasının zaman karmaşıklığı - Açık2). Yineleme için iki döngüyü kullanır.

Eklemeli sıralamanın bir diğer önemli avantajı ise; adı verilen popüler sıralama algoritması tarafından kullanılır. Kabuk sıralaması.

Ekleme sıralamasındaki yardımcı alan: Ç(1)

Çözüm

Eklemeli sıralama, birçok avantajı olan basit ve verimsiz bir algoritmadır, ancak daha etkili algoritmalar da mevcuttur.

Bu derste ekleme sıralaması kavramını ve Python programlama dilini kullanarak uygulanmasını tartıştık.