logo

Lisäyslajittelu Pythonissa

Lisäyslajittelu on yksinkertaisempi ja tehokkaampi algoritmi kuin edellinen kuplalajittelualgoritmi. Lisäyslajittelualgoritmin konsepti perustuu korttipakkaan, jossa lajittelemme pelikortin tietyn kortin mukaan. Sillä on monia etuja, mutta tietorakenteessa on saatavilla monia tehokkaita algoritmeja.

Kun korttia pelataan, vertaamme korttien käsiä keskenään. Useimmat pelaajat haluavat lajitella korttinsa nousevaan järjestykseen, jotta he näkevät nopeasti, mitkä yhdistelmät heillä on käytettävissään.

Lisäyslajittelun toteutus on helppoa ja yksinkertaista, koska se opetetaan yleensä ohjelmoinnin alussa. Se on paikallaan ja vakaa algoritmi joka on hyödyllisempi lähes lajiteltujen tai harvempien elementtien kohdalla.

Lisäyslajittelualgoritmi ei ole niin nopea, koska se käyttää sisäkkäistä silmukkaa elementtien lajitteluun.

Ymmärretään seuraavat termit.

Mitä tarkoittaa paikallaan oleva ja vakaa?

    Paikallaan:Paikalla oleva algoritmi vaatii lisätilaa ottamatta huomioon kokoelman syötekokoa. Lajittelun jälkeen se kirjoittaa uudelleen kokoelman elementtien alkuperäiset muistipaikat.Vakaa:Vakaa on termi, joka hallitsee yhtäläisten objektien suhteellista järjestystä alkuperäisestä taulukosta.

Tärkeämpää on, että lisäyslajittelu ei vaadi taulukon koon etukäteen tietämistä ja se vastaanottaa yhden elementin kerrallaan.

Hienoa lisäyslajittelussa on se, että lisäämme lajiteltavia elementtejä - algoritmi järjestää sen oikealle paikalleen suorittamatta koko lajittelua.

Se on tehokkaampi pienille (alle 10) ryhmille. Ymmärretään nyt lisäyslajittelun käsitteet.

Lisäyslajittelun käsite

Taulukko valui käytännössä kahteen osaan lisäyslajittelussa - An lajittelematon osa ja lajiteltu osa.

Lajiteltu osa sisältää taulukon ensimmäisen elementin ja muu lajittelematon osa sisältää loput taulukosta. Lajittelemattoman taulukon ensimmäistä elementtiä verrataan lajiteltuun taulukkoon, jotta voimme sijoittaa sen oikeaan alitaulukkoon.

kuinka tietää näytön koko

Se keskittyy elementtien lisäämiseen siirtämällä kaikkia elementtejä, jos oikeanpuoleinen arvo on pienempi kuin vasen.

Se toistuu toistuvasti, kunnes kaikki elementti on lisätty oikeaan paikkaan.

linuxin pikakuvakkeet

Voit lajitella taulukon käyttämällä lisäyslajittelua alla on lisäyslajittelun algoritmi.

  • Listassa on kaksi osaa - lajiteltu ja lajittelematon.
  • Toisto arr[1]:stä arr[n]:ään annetun taulukon yli.
  • Vertaa nykyistä elementtiä seuraavaan elementtiin.
  • Jos nykyinen elementti on pienempi kuin seuraava elementti, vertaa edelliseen elementtiin. Siirrä suurempiin elementteihin yksi kohta ylöspäin tehdäksesi tilaa vaihdetulle elementille.

Ymmärretään seuraava esimerkki.

Otamme huomioon ensimmäinen elementti in lajiteltu matriisi seuraavassa taulukossa.

[10, 4, 25, 1, 5]

Ensimmäinen askel kohti lisää 10 lajiteltuun aliryhmään

[ 10 , 4, 25, 1, 5]

Nyt otamme ensimmäisen elementin lajittelemattomasta taulukosta - 4. Tallennamme tämän arvon uuteen muuttujaan temp. Nyt , voimme nähdä, että 10>4 siirrämme sitten 10 oikealle ja se korvaa aiemmin tallennetun 4:n.

[ 10 , 10, 25, 1, 5] (lämpötila = 4)

Tässä 4 on pienempi kuin kaikki lajitellun alitaulukon elementit, joten lisäämme sen ensimmäiseen indeksipaikkaan.

yliviivaus

[ 4, 10, 25, 1, 5]

Meillä on kaksi elementtiä lajitetussa alitaulukossa.

Tarkista nyt numero 25. Olemme tallentaneet sen lämpötilaan muuttuja. 25> 10 ja myös 25> 4 sitten laitamme sen kolmanteen paikkaan ja lisäämme sen lajiteltuun alitaulukkoon.

[ 4, 10, 25, viisitoista]

Tarkistamme jälleen numeron 1. Tallennamme sen sisään temp. 1 on pienempi kuin 25. Se korvaa luvun 25.

[ 4, 10, 25, 25, 5] 10>1, niin se korvaa uudelleen

[ 4, 25, 10, 25, 5]

[ 25, 4, 10, 25, 5] 4>1 asettaa nyt arvon temp = 1

[ 1, 4, 10, 25 , 5]

Nyt meillä on 4 elementtiä lajitetussa alitaulukossa. 5<25 25 then shift to the right side and pass lämpötila = 5 vasemmalle puolelle.

[ 1, 4, 10, 25 , 25] laittolämpötila = 5

Nyt saadaan lajiteltu taulukko yksinkertaisesti asettamalla temp-arvo.

[1, 4, 5, 10, 25]

jtextfield

Annettu taulukko on lajiteltu.

Toteutus

Lisäyksen toteuttaminen on suhteellisen helppoa. Toteutamme Python-kokonaislukutaulukon avulla. Ymmärretään seuraava esimerkki -

Python ohjelma

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

Selitys:

Yllä olevaan koodiin olemme luoneet funktion nimeltä insertion_sort(list1). Toiminnon sisällä -

  • Määritimme silmukalle listan läpikulkua 1:stä len(lista1).
  • In for -silmukalle määritettiin arvot list1 in arvo Joka kerta, kun silmukka iteroi, uusi arvo annetaan arvomuuttujalle.
  • Seuraavaksi siirsimme listan lista1[0…i-1] elementit, jotka ovat suurempia kuin arvo, yhden aseman nykyistä asemaansa edelle.
  • Nyt käytimme while tarkistaaksemme, onko j suurempi tai yhtä suuri kuin 0, ja arvo on pienempi kuin luettelon ensimmäinen elementti.
  • Jos molemmat ehdot ovat tosia, siirrä ensimmäinen elementti arvoon 0thindeksoida ja pienentää j:n arvoa ja niin edelleen.
  • Sen jälkeen kutsuimme funktiota ja välitimme listan ja tulostimme tuloksen.

Mukautettujen objektien lajittelu

Python tarjoaa joustavuuden muuttaa algoritmia mukautetun objektin avulla. Luomme mukautetun luokan ja määritämme todellisen vertailuparametrin uudelleen ja yritämme säilyttää saman koodin kuin yllä.

Joudumme ylikuormittamaan operaattoreita voidaksemme lajitella kohteet eri tavalla. Mutta voimme esittää toisen argumentin insertion_sort() toimintoa käyttämällä lambda toiminto. Lambda-toiminto on kätevä lajittelumenetelmää kutsuttaessa.

katodisädeputkimonitori

Ymmärretään seuraava esimerkki mukautettujen objektien lajittelusta.

Ensinnäkin määrittelemme Kohta luokka:

Python ohjelma

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

Lähtö:

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

Yllä olevan koodin avulla voimme lajitella koordinaattipisteet. Se toimii kaikentyyppisille luetteloille.

Aika monimutkaisuus lisäyslajittelussa

Lisäyslajittelu on hidas algoritmi; joskus se näyttää liian hitaalta laajalle tietojoukolle. Se on kuitenkin tehokas pienille listoille tai taulukoille.

Lisäyslajittelun aika monimutkaisuus on - Päällä2). Se käyttää kahta silmukkaa iterointiin.

Toinen lisäyslajittelun tärkeä etu on, että; sitä käyttää suosittu lajittelualgoritmi nimeltä Shell lajitella.

Aputila lisäyslajittelussa: O(1)

Johtopäätös

Lisäyslajittelu on yksinkertainen ja tehoton algoritmi, jolla on monia etuja, mutta tehokkaampia algoritmeja on saatavilla.

Tässä opetusohjelmassa olemme keskustelleet lisäyslajittelun käsitteestä ja sen toteutuksesta Python-ohjelmointikielellä.