logo

Sortiranje umetanjem u Pythonu

Sortiranje umetanjem jednostavan je i učinkovitiji algoritam od prethodnog algoritma sortiranja u obliku mjehurića. Koncept algoritma sortiranja umetanjem temelji se na špilu karata gdje razvrstavamo igraću kartu prema određenoj karti. Ima mnogo prednosti, ali postoji mnogo učinkovitih algoritama dostupnih u strukturi podataka.

Dok kartamo, međusobno uspoređujemo ruke karata. Većina igrača voli poredati karte uzlaznim redoslijedom kako bi brzo vidjeli koje kombinacije imaju na raspolaganju.

Implementacija sortiranja umetanjem laka je i jednostavna jer se općenito uči na početku lekcije programiranja. To je na mjestu i stabilan algoritam to je korisnije za gotovo sortirane ili manji broj elemenata.

Algoritam sortiranja umetanjem nije tako brz jer koristi ugniježđenu petlju za sortiranje elemenata.

Razumimo sljedeće pojmove.

10 od 50,00 kn

Što znači na mjestu i stabilno?

    Na mjestu:In-place algoritam zahtijeva dodatni prostor bez obzira na ulaznu veličinu zbirke. Nakon obavljanja sortiranja, ponovno zapisuje izvorne memorijske lokacije elemenata u zbirci.Stabilan:Stable je pojam koji upravlja relativnim redoslijedom jednakih objekata iz početnog niza.

Što je još važnije, sortiranje umetanjem ne zahtijeva unaprijed poznavanje veličine niza i prima jedan po jedan element.

Sjajna stvar kod sortiranja umetanjem je ako umetnemo više elemenata za sortiranje - algoritam raspoređuje na svoje pravo mjesto bez izvođenja potpunog sortiranja.

Učinkovitiji je za nizove male (manje od 10). Razmotrimo sada koncept sortiranja umetanjem.

Koncept sortiranja umetanjem

Niz se razlio praktički u dva dijela u sortiranju umetanja - An nerazvrstani dio i sortirano dio.

Sortirani dio sadrži prvi element niza, a drugi nesortirani poddio sadrži ostatak niza. Prvi element u nesortiranom nizu uspoređuje se sa sortiranim nizom kako bismo ga mogli smjestiti u odgovarajući podniz.

Fokusira se na umetanje elemenata pomicanjem svih elemenata ako je vrijednost na desnoj strani manja od lijeve strane.

To će se ponavljati dok se element all ne umetne na ispravno mjesto.

proljetna čizma

Za sortiranje niza pomoću sortiranja umetanjem u nastavku je algoritam sortiranja umetanjem.

  • Prolio popis u dva dijela - sortirano i nesortirano.
  • Iteracija od arr[1] do arr[n] preko danog niza.
  • Usporedite trenutni element sa sljedećim elementom.
  • Ako je trenutni element manji od sljedećeg elementa, usporedite s prethodnim elementom, pomaknite se na veće elemente jednu poziciju prema gore kako biste napravili mjesta za zamijenjeni element.

Razumimo sljedeći primjer.

Razmotrit ćemo prvi element u sortirani niz u sljedećem nizu.

[10, 4, 25, 1, 5]

Prvi korak do dodaj 10 na sortirani podniz

[ 10 , 4, 25, 1, 5]

Sada uzimamo prvi element iz nesortiranog niza - 4. Tu vrijednost spremamo u novu varijablu temp. Sada , možemo vidjeti da je 10>4, a zatim pomaknemo 10 udesno i to prebriše 4 koje je prethodno bilo pohranjeno.

[ 10 , 10, 25, 1, 5] (temp = 4)

Ovdje je 4 manji od svih elemenata u sortiranom podnizu, pa ga umećemo na prvu poziciju indeksa.

pretvorba int u string u Javi

[ 4, 10, 25, 1, 5]

Imamo dva elementa u sortiranom podnizu.

Sada provjerite broj 25. Spremili smo ga u temp varijabla. 25> 10 i također 25> 4 zatim ga stavljamo na treću poziciju i dodajemo sortiranom podnizu.

[ 4, 10, 25, petnaest]

Opet provjeravamo broj 1. Spremamo ga temp. 1 je manje od 25. Prepisuje 25.

[ 4, 10, 25, 25, 5] 10>1 zatim se ponovno prepisuje

[ 4, 25, 10, 25, 5]

[ 25, 4, 10, 25, 5] 4>1 sada stavite vrijednost temp = 1

[ 1, 4, 10, 25 , 5]

Sada imamo 4 elementa u sortiranom podnizu. 5<25 25 then shift to the right side and pass temp = 5 na lijevu stranu.

[ 1, 4, 10, 25 , 25] stavite temp = 5

Sada dobivamo sortirani niz jednostavnim postavljanjem temp vrijednosti.

[1, 4, 5, 10, 25]

okvir tkinter

Zadani niz je sortiran.

Provedba

Implementacija umetanja je relativno laka. Implementirat ćemo pomoću Python niza cijelih brojeva. Razumimo sljedeći primjer -

Python program

 # 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]:>

Obrazloženje:

U gornjem kodu stvorili smo funkciju pod nazivom sortiranje_umetanjem(lista1). Unutar funkcije -

  • Definirali smo for petlju za prelazak liste od 1 do len(popis1).
  • U for petlji, dodijeljene su vrijednosti liste1 u vrijednost Svaki put kada se petlja ponovi, nova vrijednost će se dodijeliti varijabli vrijednosti.
  • Zatim smo premjestili elemente liste1[0…i-1], koji su veći od vrijednost, jednu poziciju ispred svoje trenutne pozicije.
  • Sada smo koristili while da provjerimo je li j veći ili jednak od 0, i vrijednost je manji od prvog elementa liste.
  • Ako su oba uvjeta istinita, pomaknite prvi element na 0thindeks i smanjiti vrijednost j i tako dalje.
  • Nakon toga pozvali smo funkciju i proslijedili listu te ispisali rezultat.

Razvrstavanje prilagođenih objekata

Python pruža fleksibilnost za promjenu algoritma pomoću prilagođenog objekta. Stvorit ćemo prilagođenu klasu i redefinirati stvarni parametar usporedbe i pokušati zadržati isti kod kao gore.

Morali bismo preopteretiti operatore kako bismo sortirali objekte na drugačiji način. No, možemo prenijeti još jedan argument sortiranje_umetanjem() funkcionirati pomoću lambda funkcija. Lambda funkcija je zgodna pri pozivanju metode sortiranja.

dugo nanizati

Razumimo sljedeći primjer sortiranja prilagođenih objekata.

Prvo, definiramo Točka razred:

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) 

Izlaz:

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

Pomoću gornjeg koda možemo sortirati koordinatne točke. Radit će za bilo koju vrstu popisa.

Vremenska složenost u sortiranju umetanjem

Sortiranje umetanjem je spor algoritam; ponekad se čini presporo za opsežan skup podataka. Međutim, učinkovit je za male popise ili nizove.

Vremenska složenost sortiranja umetanjem je - Na2). Koristi dvije petlje za ponavljanje.

Druga važna prednost vrste umetanja je da; koristi ga popularni algoritam sortiranja tzv Razvrstavanje ljuske.

Pomoćni prostor u sortiranju umetanja: O(1)

Zaključak

Sortiranje umetanjem je jednostavan i neučinkovit algoritam koji ima mnogo prednosti, ali postoje učinkovitiji algoritmi koji su dostupni.

U ovom vodiču raspravljali smo o konceptu sortiranja umetanjem i njegovoj implementaciji pomoću programskog jezika Python.