Ezt a módszert széles körben használják kártyázáskor. Az elemek (térképek) mentálisan fel vannak osztva a már „kész” sorozatra A 1 , A 2 ,…, A i -1 , és a „fennmaradó” (nem rendezett) részre: A i , A i +1 ,…, A N .
A módszer lényege, hogy minden i-edik lépésnél (i = 2-től kezdve) az i-edik elemet kivonják a nem rendezett részből és a "kész" részbe helyezik, miközben beillesztik Jó helyen.
Szöveges algoritmus módszer:
1. Indítsa el.
2. Hurok, amíg i értékei 2 és N között vannak,
lépés = 1:
a) az i-edik elem (A(i)) az A(0) cellába kerül;
b) adjunk hozzá j = -1-et, azaz j egyenlő az alanytól balra található (i-edik) elem számával, amely így a „kész” sorozatban áll;
c) ha A(0) ≥ A(j), akkor helyezze az A(0) elemet az A(j+1) cellába, ellenkező esetben helyezze az A(j) elemet az A(j+1) cellába, csökkentse az értéket j-ből egyet, és ismételje meg a c) lépést.
ábrán. Az 1. ábra a rendezési módszer blokkdiagramját mutatja közvetlen kapcsolat.
A módszer a következőképpen működik: az i-edik lépésnél (i = 2-től kezdve) az i-edik elem egy szabad cellába kerül (például A(0)). Ezt az elemet összehasonlítja a tőle balra lévő „kész” részben található elemmel. Ha az A(0) elem kisebb, akkor az összehasonlított (j-edik elem) egy pozícióval jobbra tolódik, majd a következő elemet veszik összehasonlításra. Ha az A(0) elem nem kisebb, mint összehasonlításkor, akkor közvetlenül az összehasonlított elem utáni helyre kerül.
Rizs. 1. A közvetlen befogadás szerinti rendezés blokkdiagramja
ábrán. A 2. ábra a közvetlen befogadás szerinti rendezésre mutat példát.
Forrás sorozat | |||||||||
A (0) | |||||||||
i = 2 | ![]() | ||||||||
i = 3 | |||||||||
i = 4 | |||||||||
I=5 | |||||||||
i = 6 | |||||||||
i = 7 | |||||||||
I = 8 | |||||||||
Eredmény |
Rizs. 2. Példa a közvetlen befogadás szerinti rendezésre
A közvetlen befoglalási rendezés arra az esetre alkalmasabb, ha a rendezendő adatok szekvenciálisan (egymás után) érkeznek.
Közvetlen kiválasztás rendezés
A módszer lényege a következő. A "fennmaradó" (nem rendezett) rész legkisebb elemét kiválasztja és felcseréli az első elemmel (ugyanabban a rendezetlen részben). Ezt követően a rendezetlen rész hosszát egy elemmel csökkentjük (az elsővel), és az egész folyamat folytatódik (n - 1) elemmel, majd (n - 2) elemmel stb., amíg egy marad, a legnagyobb elem.
Ez a módszer bizonyos értelemben ellentéte a közvetlen befogadás módszerének. A közvetlen beillesztési módszerben minden lépésben csak egy következő elemet és a sorozat már „kész” részének összes elemét veszik figyelembe, amelyek között megtaláljuk ennek a következő elemnek a beillesztési pontját. A közvetlen kiválasztási módszernél pedig egy (minimális) elem megtalálásához a rendezetlen rész összes elemét átnézik, és ez a minimális elem kerül a következő elemként a már „kész” részbe.
Szöveges algoritmus módszer:
1. Indítsa el.
2. Hurok, miközben i értékei 1 és N - 1 között vannak,
lépés = 1:
a) tedd az aktuális (i-edik) elemet valamelyik memóriacellába (X) és emlékezz sorozatszám(i) az aktuális elem (a K változóban);
b) hurok, míg j értékei i + 1-től (vagyis az i-t követő elemtől N-ig), lépés = +1:
huroktest: ha X > A(j), akkor helyezzük az A(j) elemet az X cellába, és jegyezzük meg a számát a K cellában;
c) A(K) = A(i) és A(i) = X hozzárendelése.
ábrán. A 3. ábra a közvetlen kijelölés szerinti rendezésre mutat példát.
Forrás sorozat | 44 | 06 | ||||||
I = 1 | 55 | 12 | ||||||
i = 2 | 55 | 18 | ||||||
i = 3 | 42 | 55 | ||||||
i = 4 | 94 | 44 | ||||||
I=5 | 55 | 94 | ||||||
i = 6 | 94 | 67 | ||||||
i = 7 |
Rizs. 3. Példa a közvetlen kiválasztással történő rendezésre
Ezt a módszert széles körben használják kártyázáskor. Az elemek (térképek) mentálisan fel vannak osztva a már „kész” A1 … An sorozatra és az eredeti Ai … An sorozatra. Minden lépésben i=2-től kezdve és I-t minden alkalommal eggyel növelve kivonjuk az eredeti sorozatból i-edik elemés eltolva a kész sorozatra, miközben a megfelelő helyre kerül.
A fenti példaként bemutatja a rendezés folyamatát nyolc véletlenszerűen kiválasztott szám felvételével: Ennek a rendezésnek az algoritmusa a következő:
FOR i:=2 TO n DO
x beillesztése a megfelelő helyre a ... a[j] közé;
A megfelelő hely megtalálásának valós folyamatában kényelmes, az összehasonlítások és a mozgások egymás utáni váltakozása során az X-et szitáljuk, azaz X-et összehasonlítjuk a következő aj elemmel, majd vagy X-et illesztünk be. szabad hely, vagy az aj jobbra tolódik (átkerül), és a folyamat balra "elmegy". Vegye figyelembe, hogy a szitálási folyamat véget érhet, ha a következő két különböző feltétel egyike teljesül:
1. Olyan aj elemet találunk, amelynek kulcsa kisebb, mint X kulcsa.
2. Elérte a kész sorozat bal végét.
Ez a tipikus eset, amikor egy ismétlődő folyamat két befejezési feltétellel történik, lehetővé teszi számunkra a jól ismert barrier trükk (sentinel) alkalmazását. Itt egyszerűen alkalmazható az a0 gát X értékű beállításával. (Megjegyzendő, hogy ehhez az a változó leírásában az index tartományát 0 ... n-re kell bővíteni.)
A közvetlen befogadás módszerének elemzése. A kulcsösszehasonlítások száma (Ci) az i-edik szitálásban legfeljebb i - 1, legalább - 1; ha feltételezzük, hogy n kulcs minden permutációja egyformán valószínű, akkor az összehasonlítások átlagos száma i/2. Az átvitelek (elem-hozzárendelések) száma Mi egyenlő Ci + 2-vel (beleértve a sorompót is). Ezért teljes szám az összehasonlítások és az átutalások száma a következő:
Mentés = (n2 + n - 2)/4,
Сmax = (n2 + n - 4)/4,
M min \u003d Z * (n - 1),
M ave \u003d (n2 + 9n - 10) / 4,
M max = (n2 + 3n - 4)/2.
A minimális becslések már rendezett kezdeti elemek sorozata esetén fordulnak elő, míg a legrosszabb becslések akkor, ha kezdetben fordított sorrendben vannak elrendezve. Bizonyos értelemben a zárványok szerinti válogatás valóban természetes viselkedést mutat. Jól látható, hogy a fenti algoritmus a stabil rendezési folyamatot írja le: az egyenlő kulcsú elemek sorrendje változatlan marad.
A közvetlen zárványokkal rendelkező algoritmus könnyen javítható, ha odafigyelünk arra, hogy az elkészült sorozat (a1 ... ai-1 , amelybe be akarunk szúrni új elem, maga már megrendelt. Természetes, hogy megállunk a bináris keresésnél, amelyben a kész sorozat közepével próbálnak összehasonlítani, majd a felezés folyamata addig tart, amíg meg nem találjuk a befogadási pontot. Az ilyen módosított rendezési algoritmust bináris beillesztési módszernek nevezzük.
A rendezés a memóriában lévő adatok szabályos elrendezése a kiválasztott paraméter szerint. A szabályszerűséget a paraméterérték növekedésének (csökkenésének) tekintjük az adattömb elejétől a végéig.
Az adatok feldolgozása során fontos ismerni az adatok információs mezőjét és a gépben való elhelyezését.
Különbséget kell tenni a belső és a külső rendezés között:
Belső rendezés – rendezés véletlen hozzáférésű memória;
Külső rendezés - rendezés külső memóriában.
Ha a rendezendő iratok nagy mennyiségű memóriát foglalnak el, az áthelyezésük költséges. Csökkentésük érdekében válogatás történik kulcscímtáblázat, vagyis elvégzik a mutatók permutációját, és maga a tömb nem mozdul. Ez- címtábla rendezési módszer.
Rendezéskor ugyanazok a kulcsok fordulhatnak elő. Ebben az esetben kívánatos a rendezés után ugyanazokat a kulcsokat a forrásfájlban megadott sorrendbe rendezni.Ez- stabil fajta.
Csak azokat a fajtákat vesszük figyelembe, amelyek nem használnak további RAM-ot. Az ilyen fajtákat ún "ugyanazon a helyen".
A válogatás hatékonyságát több szempont szerint is figyelembe lehet venni:
A válogatásra fordított idő;
A rendezéshez szükséges RAM mennyisége;
A programozó által a programírással töltött idő.
Az első kritériumot emeljük ki. A válogatásra fordított idő megfelelője tekinthető összehasonlítások számaés mozgások száma válogatáskor.
A rendezés során az összehasonlítások és mozgások számának sorrendje belül van
O-tól (n log n) O-ig (n 2);
O(n) ideális és elérhetetlen eset.
A következő válogatási módszerek vannak:
Szigorú (közvetlen) módszerek;
Továbbfejlesztett módszerek.
Szigorú módszerek:
Közvetlen csatlakozási mód;
Közvetlen kiválasztási módszer;
közvetlen cseremódszer.
A szigorú módszerek hatékonysága kb.
Közvetlen befogadás rendezése
Az elemek gondolatilag kész sorozatra vannak osztva: 1,...,a i-1 és az eredeti sorozatra.
Minden lépésnél, i = 2-től kezdve, és i-t minden alkalommal eggyel növelve, az i-edik elemet kiemeljük az eredeti sorozatból, és átkerül a kész sorozatba, miközben beillesztjük a megfelelő helyre.
Az algoritmus lényege a következő:
i = 2 és n között
X = a(i)
Találunk egy helyet az (1) ... a (i) között, ahol x szerepel
következő i
Két közvetlen befogadási rendezési algoritmus létezik. Először is - nincs akadály
Akadálymentes Közvetlen Befoglalás-rendezési Algoritmus
i = 2 és n között
X = a(i)
j = i-1 esetén 1-ig
Ha x< a(j)
Ekkor a(j + 1) = a(j)
Különben menj L-hez
endif
Következő j
L: a(j + 1) = x
következő i
Visszatérés
A fenti algoritmus hátránya a technológia megsértése strukturált programozás, amelynél nem kívánatos a feltétel nélküli ugrások alkalmazása. Ha a belső hurok while hurokként van megszervezve, akkor szükség van egy „korlátra”, amely nélkül a kulcsok negatív értékeinél jelentőségvesztés és a számítógép „lefagyása” következik be.
Barrier Direct Inclusion Sorting Algorithm
i = 2 és n között
X = a(i)
A(0) = x (a(0) – akadály)
J = i-1
Míg x< a(j) do
A(j+1) = a(j)
J = j-1
Vége
A(j+1) = x
következő i
Visszatérés
A közvetlen befogadás algoritmusának hatékonysága
A kulcsösszehasonlítások Ci száma az i-edik szűrésnél legfeljebb i-1, legalább -1; ha feltételezzük, hogy N kulcs minden permutációja egyformán valószínű, akkor az összehasonlítások átlagos száma = i/2. Az átszállások száma Mi=Ci+3 (a sorompót is beleértve). A minimális becslések már rendezett kezdeti elemek sorozata esetén fordulnak elő, míg a legrosszabb becslések akkor, ha kezdetben fordított sorrendben vannak elrendezve. Bizonyos értelemben a befogadás szerinti válogatás valóban természetes viselkedést mutat. Jól látható, hogy a fenti algoritmus a stabil rendezési folyamatot írja le: az egyenlő kulcsú elemek sorrendje változatlan marad.
Az összehasonlítások száma a legrosszabb esetben, ha a tömb ellentétes módon van rendezve, C max = n (n - 1) / 2, azaz - O (n 2). A permutációk száma M max = C max + 3(n-1), azaz. - O (n 2). Ha a tömb már rendezve van, akkor az összehasonlítások és permutációk száma minimális: C min = n-1; Mmin = 3(n-1).
Rendezés közvetlen csere szerint (buborékos rendezés)
NÁL NÉL ez a szekció olyan módszert írunk le, ahol két elem helycseréje a folyamat legjellemzőbb jellemzője. Az alábbiakban felvázolt közvetlen csere algoritmus egy pár helyének összehasonlításán és megváltoztatásán alapul szomszédos elemekés ezt a folyamatot addig folytatva, amíg az összes elemet el nem rendezik.
Iterálunk a tömbön, minden alkalommal eltolva a maradék sorozat legkisebb elemét a tömb bal végére. Ha a tömböket inkább függőlegesnek, mint vízszintesnek tekintjük, akkor az elemek egy víztartályban lévő buborékokként értelmezhetők, amelyek súlya a kulcsának felel meg. Ebben az esetben minden lépésnél egy buborék mintegy a súlyának megfelelő szintre emelkedik (lásd az alábbi ábrán látható ábrát).
C min = n - 1, O(n) sorrend,
és egyáltalán nincs mozgás.
A közvetlen válogatási módszerek összehasonlító elemzése azt mutatja, hogy a csere "válogatás" klasszikus formájában a zárványok és a szelekciók segítségével történő válogatás keresztezése. Ha a fenti fejlesztéseket végrehajtják rajta, akkor kellően rendezett tömböknél buborék fajta sőt előnye is van.
Ezt a módszert "buborékos rendezésnek" nevezik.
Közvetlen cseremódszer-algoritmus
j = n-re -1 lépés
ha a(j)< a(j - 1) then
A mi esetünkben egy passzot kaptunk „tétlen”. Annak érdekében, hogy az elemeket ne láthassa újra, és ezért összehasonlításokat végezhessen, időt szánva erre, beírhatja a jelölőnégyzetet fl, ami az értékben marad hamis, ha a következő menet során nem történik csere. Az alábbi algoritmusban a kiegészítések félkövérrel vannak jelölve.
fl = igaz
ha fl = false, akkor térjen vissza
fl=hamis
j = n-re -1 lépés
ha a(j)< a(j - 1) then
fl = igaz
A buborékos rendezés továbbfejlesztése a rázós rendezés, ahol minden egyes lépés után az irány megfordul egy belső hurokban.
A közvetlen csererendezési algoritmus hatékonysága
Összehasonlítások száma C max = n(n-1)/2, O(n 2) sorrend.
A mozgások száma M max \u003d 3C max \u003d 3n (n-1) / 2, O (n 2) sorrendben.
Ha a tömb már rendezve van és a zászlóalgoritmus alkalmazva van, akkor csak egy lépés elég, és akkor megkapjuk a minimális számú összehasonlítást
A közvetlen befoglalási rendezést, az egyszerű kiválasztási rendezéshez hasonlóan, általában olyan tömbökhöz használják, amelyek nem tartalmaznak ismétlődő elemeket.
A közvetlen beillesztés módszerével történő rendezés, mint az összes fent leírt, lépésenként történik. A k-edik lépésben azt tekintjük, hogy a tömb első k-1 elemét tartalmazó része már rendezett, azaz
a ≤ a ≤ ... ≤ a .
Ezután vegyük a k-edik elemet, és találjunk neki egy helyet a tömb rendezett részében, hogy a beillesztése után ne sérüljön meg a sorrend, azaz meg kell találni egy ilyen j-t (1 ≤ j ≤ k -1) hogy a [j] ≤ a[ k]< a. Затем вставить элемент а [k] на найденное место.
Minden lépéssel növekszik a tömb rendezett része. A teljes rendezés végrehajtásához n-1 lépés szükséges.
Nézzük meg ezt a folyamatot egy példán keresztül. Tegyük fel, hogy egy 10 elemből álló tömböt kell növekvő sorrendbe rendezni a közvetlen beillesztés módszerével
1 - lépés
13 6 8 11 3 1 5 9 15 7
menta (13). Be kell rakni egy másodikat.
tömbelem (6) úgy, hogy a
ség megmaradt. 6 óta< 13, вставляем
6 az első helyen. Rendezett rész
tömb két elemet tartalmaz (6 13).
3 - lépés
6 8 13 11 3 1 5 9 15 7 Következő elem- 11. A tömb rendezett részébe írják a harmadik helyre, hiszen 11 > 8 , de 11< 13.
5- lépés
3 6 8 11 13 1 5 9 15 7 Ugyanebből az okból kifolyólag 1-et írunk az elsőre
6 - lépés
1 3 6 8 11 13 5 9 15 7 Mivel 5 > 3, de 5< 6 то место 5 в упоря-
A lányrész a harmadik.
7 -lépés
1 3 5 6 8 11 13 9 15 7 A 9-es szám helye a hatodik.
8 -lépés
1 3 5 6 8 9 11 13 15 7 Határozza meg az utolsó előtti helyét!
15. elem. Kiderül, hogy ez az elem
A tömb eleme már a helyén van.
9 -lépés
1 3 5 6 8 9 11 13 15 7 Már csak megfelelő helyet kell találni
Az utolsó elem (7).
1 3 5 6 7 8 9 11 13 15 A tömb teljesen rendezve van.
Most röviden leírhatjuk a közvetlen befogadás-rendezési algoritmus egy töredékét:
k:= 2 To n Do
(mivel úgy kezdem a válogatást, hogy jó helyet keresek a-nak, 2-ről n-re megyek)
'szúrja be az x-et a megfelelő helyre a , ..., a[k]-ba'
Meg kell válaszolni azt a kérdést, hogy hogyan keressünk megfelelő helyet az x elem számára. Tegyük a következőket: megnézzük az x-től balra található elemeket (vagyis azokat, amelyek már rendezve vannak), haladva a tömb elejére. Meg kell vizsgálni az a[ j ] , j elemeket k-1-ről 1-re változik. Az ilyen vizsgálatnak akkor kell véget érnie, ha az alábbi feltételek valamelyike teljesül:
talált elem a[j]< x, что говорит о необходимости вставки x между a и a[j].
· a tömb rendezett részének bal végét elértük, ezért először x-et kell beszúrni.
Amíg ezen feltételek valamelyike nem teljesül, addig a megtekintett elemeket az első pozícióba toljuk jobbra, aminek eredményeként x alatti hely szabadul fel a rendezett részben.
Közvetlen befogadás válogató program:
program n3; (Rendezés csökkenő sorrendben)
type ar=egész számok tömbje;
eljárás rendezés3(var a:ar);
var i,j,x,k:integer;
k:=2-hez n do
x:=a[k]; j:=k-1;
míg (j>0) és (x>=a[j]) igen
writeln("Adja meg a forrástömböt:");
mert i:=1-től n-ig olvass(a[i]);
writeln("Rendezett tömb:");
for i:=1 to n do write(a[i]," ");
Célkitűzés Vizsgálja meg a tömbrendezést a közvetlen beillesztési módszerrel, és értékelje ennek az algoritmusnak a hatékonyságát.Általános információ
A közvetlen befoglalási rendezést, az egyszerű kiválasztási rendezéshez hasonlóan, általában olyan tömbökhöz használják, amelyek nem tartalmaznak ismétlődő elemeket. Az ezzel a módszerrel történő rendezés lépésről lépésre szekvenciálisan történik. A k-edik lépésúgy tekintjük, hogy a tömb első k-1 elemeit tartalmazó része már rendezett, azaz. Ezután venni kell kth elemés úgy válasszunk neki helyet a tömb rendezett részében, hogy a beillesztése után a sorrendet ne zavarják meg, vagyis ilyet kell találni. Ezután be kell szúrni az a[k] elemet a talált helyre. Minden lépéssel növekszik a tömb rendezett része. A teljes rendezés végrehajtásához n-1 lépés szükséges. Meg kell válaszolni azt a kérdést, hogy hogyan keressünk megfelelő helyet az x elem számára. A következőképpen járunk el: megnézzük az x-től balra található elemeket (vagyis a már rendezetteket), haladva a tömb elejére. Szükséges az a[j], j elemek pásztázása k-l-ről 1-re változik. Az ilyen keresés akkor fejeződik be, ha az alábbi feltételek valamelyike teljesül: az a[j] elemet megtaláltuk Példa Röviden írjuk le a rendezési algoritmus közvetlen beillesztéssel: k:= 2-től n-ig csináld beginx:= a[k]; j:=k-1; (szúrja be az x-et megfelelő helyre a, ..., a[k]-ba) (ehhez egy ciklust szervezünk, amely miközben fut) ( j > 0 és xEllenőrző feladat
Írjon programot, amely beilleszti egy tömb utolsó elemét ugyanannak a tömbnek az első negatív eleme után.Feladat opciók
FIGYELEM!!! Hacsak nincs kifejezetten másképp jelezve, a bemeneti adatok (forrástömb) és a kimeneti adatok (rendezett tömb) a következőképpen vannak kialakítva szöveges fájl, egész számokat tartalmaz! Minden feladathoz előzetesen írjon egy eljárást egy tömb rendezésére a közvetlen beillesztés módszerével. 1. Adott egy n elemet tartalmazó sorozat. Rendezze őket növekvő sorrendbe, miközben elveti az összes ismétlődő elemet. 2. Határozza meg a divatot ezt a sort- elemei között leggyakrabban előforduló érték. 3. Az eredeti adatkészlet a vezetéknévből, életkorból és szolgálati időből álló rekordok sorozata. Nyomtassa ki ezt a listát: 1) ABC sorrendben; 2) az életkor növekedésének sorrendjében; 3) a munkatapasztalat növekedésének sorrendjében. 4. Írjon egy eljárást a csökkenő sorrendbe rendezéshez! 5. Adott egész számok sorozata. Mindent növekvő sorrendben különféle számok szerepel ebben a sorozatban. 6. n különböző egész számból álló sorozatot kapsz. Kapjon különálló egész számokat úgy, hogy![](https://i1.wp.com/mycpp.ru/delphi/lab/1/image10.gif)
![](https://i2.wp.com/mycpp.ru/delphi/lab/1/image14.gif)
![](https://i0.wp.com/mycpp.ru/delphi/lab/1/image16.gif)
![](https://i1.wp.com/mycpp.ru/delphi/lab/1/image20.gif)