Renditja e futur: shembuj se si funksionon algoritmi

Përmbajtje:

Renditja e futur: shembuj se si funksionon algoritmi
Renditja e futur: shembuj se si funksionon algoritmi
Anonim

Ekzistojnë disa algoritme bazë për zgjidhjen e problemit të renditjes së një grupi. Një nga më të famshmit midis tyre është lloji i futjes. Për shkak të qartësisë dhe thjeshtësisë, por efikasitetit të ulët, kjo metodë përdoret kryesisht në mësimdhënien e programimit. Kjo ju lejon të kuptoni mekanizmat bazë të renditjes.

Përshkrimi i algoritmit

Thelbi i algoritmit të renditjes së futjes është që brenda grupit fillestar të formohet një segment i renditur siç duhet. Çdo element krahasohet një nga një me pjesën e kontrolluar dhe futet në vendin e duhur. Kështu, pas përsëritjes nëpër të gjithë elementët, ata rreshtohen në rendin e duhur.

Radha e zgjedhjes së elementeve mund të jetë çdo, ato mund të zgjidhen në mënyrë arbitrare ose sipas ndonjë algoritmi. Më shpesh, numërimi sekuencial përdoret nga fillimi i grupit, ku formohet një segment i renditur.

Algoritmi i renditjes së futjes
Algoritmi i renditjes së futjes

Fillimi i renditjes mund të duket kështu:

  1. Merr elementin e parë të grupit.
  2. Meqenëse nuk ka asgjë për t'u krahasuar me të, merre vetë elementin siç është porositursekuencë.
  3. Shko te artikulli i dytë.
  4. Krahasojeni me të parën bazuar në rregullin e renditjes.
  5. Nëse është e nevojshme, ndërroni elementët në vende.
  6. Merrni dy elementët e parë si një sekuencë të renditur.
  7. Shko te artikulli i tretë.
  8. Krahasojeni me të dytin, ndërroni nëse është e nevojshme.
  9. Nëse është bërë zëvendësimi, krahasojeni me të parën.
  10. Merr tre elemente si një sekuencë të renditur.

E kështu me radhë deri në fund të grupit origjinal.

Rendimi i futjes në jetën reale

Për qartësi, ia vlen të jepet një shembull se si përdoret ky mekanizëm klasifikimi në jetën e përditshme.

Merrni, për shembull, një portofol. Kartëmonedhat njëqind, pesëqind dhe mijëra dollarësh qëndrojnë të çrregullta në ndarjen e kartëmonedhave. Kjo është një rrëmujë, në një rrëmujë të tillë është e vështirë të gjesh menjëherë copën e duhur të letrës. Vargu i kartëmonedhave duhet të renditet.

E para është një kartëmonedhë 1000 rubla, dhe menjëherë pas saj - 100. Marrim njëqind dhe e vendosim përpara. E treta me radhë është 500 rubla, vendi i duhur për të është midis njëqind dhe një mijë.

Në të njëjtën mënyrë ne i renditim letrat e marra kur luajmë "Budallai" për ta bërë më të lehtë lundrimin në to.

Renditja e futjes në jetën reale
Renditja e futjes në jetën reale

Operatorët dhe funksionet ndihmëse

Metoda e renditjes së futjes merr si hyrje një grup fillestar për t'u renditur, një funksion krahasimi dhe, nëse është e nevojshme, një funksion që përcakton rregullin për numërimin e elementeve. Më shpesh përdoret në vend të kësajdeklaratë e ciklit të rregullt.

Elementi i parë është në vetvete një grup i renditur, kështu që krahasimi fillon nga i dyti.

Algoritmi shpesh përdor një funksion ndihmës për të shkëmbyer dy vlera (ndërrim). Ai përdor një ndryshore shtesë të përkohshme, e cila konsumon kujtesën dhe ngadalëson pak kodin.

Një alternativë është zhvendosja në masë e një grupi elementësh dhe më pas futja e atij aktual në hapësirën e lirë. Në këtë rast, kalimi në elementin tjetër ndodh kur krahasimi dha një rezultat pozitiv, i cili tregon renditjen e saktë.

Algoritmi për renditjen e një vargu sipas inserteve
Algoritmi për renditjen e një vargu sipas inserteve

Shembuj zbatimi

Zbatimi specifik varet kryesisht nga gjuha e programimit e përdorur, sintaksa dhe strukturat e saj.

Zbatimi klasik C duke përdorur një variabël të përkohshëm për të shkëmbyer vlerat:


int i, j, temp; për (i=1; i =0; j--) { if (array[j] < temp) break; grup[j + 1]=grup[j]; grup[j]=temp; } }

Zbatimi PHP:


funksioni insertion_sort(&$a) {për ($i=1; $i=0 &&$a[$j] > $x; $j--) { $a[$ j + 1]=$a[$j]; } $a[$j + 1]=$x; } }

Këtu, së pari, të gjithë elementët që nuk përputhen me kushtin e renditjes zhvendosen djathtas dhe më pas elementi aktual futet në hapësirën e lirë.

Kodi Java duke përdorur ciklin while:


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

Kuptimi i përgjithshëm i kodit mbetet i pandryshuar: çdo element i grupit krahasohet në mënyrë sekuenciale me ato të mëparshmet dhe zëvendësohet me to nëse është e nevojshme.

Koha e përllogaritur e funksionimit

Natyrisht, në rastin më të mirë, hyrja e algoritmit do të jetë një grup tashmë i renditur në mënyrën e duhur. Në këtë situatë, algoritmi thjesht do të duhet të kontrollojë çdo element për t'u siguruar që është në vendin e duhur pa bërë shkëmbime. Kështu, koha e ekzekutimit do të varet drejtpërdrejt nga gjatësia e grupit origjinal O(n).

Inputi në rastin më të keq është një grup i renditur në rend të kundërt. Kjo do të kërkojë një numër të madh permutacionesh, funksioni i kohës së funksionimit do të varet nga numri i elementeve në katror.

Numri i saktë i permutacioneve për një grup krejtësisht të parregulluar mund të llogaritet duke përdorur formulën:


n(n-1)/2

ku n është gjatësia e grupit origjinal. Kështu, do të duheshin 4950 permutacione për të renditur 100 elementë në rendin e duhur.

Metoda e futjes është shumë efikase për renditjen e grupeve të vogla ose pjesërisht të renditura. Megjithatë, nuk rekomandohet aplikimi i tij kudo për shkak të kompleksitetit të lartë të llogaritjeve.

Algoritmi përdoret si ndihmës në shumë metoda të tjera më komplekse të renditjes.

Funksionimi i algoritmit të renditjes së futjes
Funksionimi i algoritmit të renditjes së futjes

Rendit vlerat e barabarta

Algoritmi i futjes i përket të ashtuquajturave lloje të qëndrueshme. Do te thote,se nuk ndërron elemente identike, por ruan rendin e tyre origjinal. Indeksi i stabilitetit është në shumë raste i rëndësishëm për renditjen e saktë.

Image
Image

Sa më sipër është një shembull i mrekullueshëm vizual i llojit të futjes në një kërcim.

Recommended: