Inset sort: mga halimbawa kung paano gumagana ang algorithm

Talaan ng mga Nilalaman:

Inset sort: mga halimbawa kung paano gumagana ang algorithm
Inset sort: mga halimbawa kung paano gumagana ang algorithm
Anonim

May ilang pangunahing algorithm para sa paglutas ng problema sa pag-uuri ng array. Isa sa pinakasikat sa kanila ay insertion sort. Dahil sa kalinawan at pagiging simple nito, ngunit mababa ang kahusayan, ang pamamaraang ito ay pangunahing ginagamit sa pagtuturo ng programming. Binibigyang-daan ka nitong maunawaan ang mga pangunahing mekanismo ng pag-uuri.

Paglalarawan ng algorithm

Ang esensya ng insertion sort algorithm ay ang isang maayos na nakaayos na segment ay nabuo sa loob ng paunang array. Ang bawat elemento ay inihambing isa-isa sa may check na bahagi at ipinasok sa tamang lugar. Kaya, pagkatapos ng pag-ulit sa lahat ng mga elemento, pumila sila sa tamang pagkakasunod-sunod.

Ang pagkakasunud-sunod ng pagpili ng mga elemento ay maaaring anuman, maaari silang piliin nang basta-basta o ayon sa ilang algorithm. Kadalasan, ang sequential enumeration ay ginagamit mula sa simula ng array, kung saan nabuo ang isang ordered segment.

Insertion sort algorithm
Insertion sort algorithm

Maaaring ganito ang simula ng pag-uuri:

  1. Kunin ang unang elemento ng array.
  2. Dahil walang maihahambing dito, kunin ang mismong elemento ayon sa pagkakasunud-sunodpagkakasunod-sunod.
  3. Pumunta sa pangalawang item.
  4. Ihambing ito sa una batay sa panuntunan sa pag-uuri.
  5. Kung kinakailangan, magpalit ng mga elemento sa mga lugar.
  6. Kunin ang unang dalawang elemento bilang isang pagkakasunod-sunod.
  7. Pumunta sa ikatlong item.
  8. Ihambing ito sa pangalawa, palitan kung kinakailangan.
  9. Kung nagawa na ang kapalit, ihambing ito sa una.
  10. Kumuha ng tatlong elemento bilang nakaayos na pagkakasunod-sunod.

At iba pa hanggang sa katapusan ng orihinal na array.

Real life insertion sort

Para sa kalinawan, sulit na magbigay ng halimbawa kung paano ginagamit ang mekanismo ng pag-uuri na ito sa pang-araw-araw na buhay.

Kumuha, halimbawa, ng wallet. Daan-daan, limang-daan, at libong-dolyar na perang papel ang nagkakagulo sa kompartimento ng banknote. Ito ay isang gulo, sa gayong hodgepodge mahirap mahanap agad ang tamang piraso ng papel. Dapat pagbukud-bukurin ang hanay ng mga banknote.

Ang pinakauna ay isang banknote na 1000 rubles, at kaagad pagkatapos nito - 100. Kumuha kami ng isang daan at inilalagay ito sa harap. Ang pangatlo sa isang hilera ay 500 rubles, ang nararapat na lugar para dito ay nasa pagitan ng isang daan at isang libo.

Sa parehong paraan, pinag-uuri namin ang mga natanggap na card kapag naglalaro ng "Fool" para mas madaling i-navigate ang mga ito.

Insertion sort sa totoong buhay
Insertion sort sa totoong buhay

Mga function ng operator at helper

Ang paraan ng insertion sort ay kumukuha bilang input ng isang paunang array na pagbukud-bukurin, isang function ng paghahambing, at, kung kinakailangan, isang function na tumutukoy sa panuntunan para sa pag-enumerate ng mga elemento. Kadalasang ginagamit sa halipregular na loop statement.

Ang unang elemento ay mismong isang ordered set, kaya ang paghahambing ay magsisimula sa pangalawa.

Madalas na gumagamit ang algorithm ng function na helper para makipagpalitan ng dalawang value (swap). Gumagamit ito ng karagdagang pansamantalang variable, na kumukonsumo ng memory at medyo nagpapabagal sa code.

Ang isang alternatibo ay ang mass shift ng isang pangkat ng mga elemento at pagkatapos ay ipasok ang kasalukuyang isa sa libreng espasyo. Sa kasong ito, ang paglipat sa susunod na elemento ay nangyayari kapag ang paghahambing ay nagbigay ng positibong resulta, na nagsasaad ng tamang pagkakasunud-sunod.

Algorithm para sa pag-uuri ng isang array sa pamamagitan ng mga pagsingit
Algorithm para sa pag-uuri ng isang array sa pamamagitan ng mga pagsingit

Mga halimbawa ng pagpapatupad

Ang partikular na pagpapatupad ay higit na nakadepende sa programming language na ginamit, syntax at istruktura nito.

Pagpapatupad ng Classic C gamit ang isang pansamantalang variable upang makipagpalitan ng mga halaga:


int i, j, temp; para sa (i=1; i =0; j--) { if (array[j] < temp) break; array[j + 1]=array[j]; array [j]=temp; } }

Pagpapatupad ng PHP:


function insertion_sort(&$a) { for ($i=1; $i=0 &&$a[$j] > $x; $j--) { $a[$ j + 1]=$a[$j]; } $a[$j + 1]=$x; } }

Dito, una, lahat ng elementong hindi tumutugma sa kundisyon ng pag-uuri ay inililipat sa kanan, at pagkatapos ay ipinapasok ang kasalukuyang elemento sa libreng espasyo.

Java code gamit ang while loop:


public static void insertionSort(int arr) { for(int i=1; i =0 &&arr[prevKey] > currElem){ arr[prevKey+1]=arr[prevKey]; arr[prevKey]=currElem; prevKey--; } } }

Ang pangkalahatang kahulugan ng code ay nananatiling hindi nagbabago: ang bawat elemento ng array ay sunud-sunod na inihahambing sa mga nauna at ipinagpalit sa kanila kung kinakailangan.

Tinantyang tagal ng pagtakbo

Malinaw, sa pinakamagandang kaso, ang input ng algorithm ay isang array na naayos na sa tamang paraan. Sa sitwasyong ito, kailangan lang suriin ng algorithm ang bawat elemento upang matiyak na nasa tamang lugar ito nang hindi gumagawa ng mga palitan. Kaya, ang oras ng pagpapatakbo ay direktang magdedepende sa haba ng orihinal na array O(n).

Ang pinakamasamang case input ay isang array na pinagsunod-sunod sa reverse order. Mangangailangan ito ng malaking bilang ng mga permutasyon, ang pagpapaandar ng runtime ay magdedepende sa bilang ng mga elementong nakakuwadrado.

Ang eksaktong bilang ng mga permutasyon para sa isang ganap na hindi nakaayos na array ay maaaring kalkulahin gamit ang formula:


n(n-1)/2

kung saan ang n ay ang haba ng orihinal na array. Kaya, aabutin ng 4950 permutation para ayusin ang 100 elemento sa tamang pagkakasunud-sunod.

Ang paraan ng pagpapasok ay napakahusay para sa pag-uuri ng maliliit o bahagyang pinagsunod-sunod na mga array. Gayunpaman, hindi inirerekomenda na ilapat ito sa lahat ng dako dahil sa mataas na pagiging kumplikado ng mga kalkulasyon.

Ginagamit ang algorithm bilang pantulong sa maraming iba pang mas kumplikadong paraan ng pag-uuri.

Ang pagpapatakbo ng insertion sort algorithm
Ang pagpapatakbo ng insertion sort algorithm

Pagbukud-bukurin ang mga katumbas na halaga

Ang insertion algorithm ay nabibilang sa tinatawag na stable sorts. Ibig sabihin,na hindi nito pinapalitan ang magkatulad na mga elemento, ngunit pinapanatili ang kanilang orihinal na pagkakasunud-sunod. Ang stability index sa maraming pagkakataon ay mahalaga para sa tamang pag-order.

Image
Image

Ang nasa itaas ay isang magandang visual na halimbawa ng insertion sort sa isang sayaw.

Inirerekumendang: