rendezés tömbök
Célkitűzés Class rendelési tömb elemeit.
Shake szortírozás széles körben használják olyan esetekben, amikor ismert, hogy az elemek vannak elrendezve szinte
Tegyük fel, hogy gondoskodjon a tömb növekvő sorrendben. Miután az első menetben, „buborék”, a legnagyobb eleme a tömb a helyére kerül. Végezze el a második menetben éppen ellenkezőleg, az elsőtől az utolsó előtti elem. Miután ez a rész a helyére kerül a legkisebb elem. És mi fog teljesíteni a tömb átjárók: a páratlan bal - jobb, és még jobb - a bal oldalon. Ugyanakkor a páratlan halad majd elfoglalja helyét a legnagyobb tételt (balról), míg a legkisebb páratlan (és maradt).
Ne felejtsük el, volt, vagy nem volt változás során a folyosón.
Emlékezz nemcsak az a tény, hogy a csere történt, hanem a helyzet (index) az elmúlt csere.
A bal border = száma az első elem
A jobb border = számának utolsó eleme
Miközben bal szegély <Правой границы делать
Egyenesen „buborékok” a bal margó a jobb 1
A jobb border = jobb határ - 1
Fordított pass „buborékok” a jobb szélétől balra + 1
Bal határ = bal oldali határának + 1
Válogató tömbök. Shell sort.
Célkitűzés Class rendelési tömb elemeit.
Ez válogatás 9) alapul a már ismert számunkra egyszerű algoritmus betétekkel PrVst. Jelentése, hogy külön rendezési módszert PrVst több rész, amelyre az eredeti tömb. Ezeket a partíciókat segít csökkenteni a szállítások száma: annak érdekében, hogy a „megfelelő” helyen a következő elemre, van, hogy egy kisebb számú váltás elemekkel.
Minden lépésnél (bár változó t tartja ezt a lépést szám) kell tennie a következőket:
- izolátum az összes alszekvenciákat, a elemei közötti távolság, amely kt;
- Mindegyik al-szekvenciák által PrVst rendezési.
Találjanak csökkenő sorrendben távolságok kt. kt-1. . k1 a fő probléma az algoritmus. Számos tanulmány kimutatta, kötő-tulajdonságai:
- K1 = 1;
- minden t kt> kt-1;
- az is kívánatos, hogy az összes kt nem többszöröse egymással (annak érdekében, hogy elkerüljék ismételt feldolgozása korábban rendezve elemek).
Donald Knuth kínál két „jó” szekvencia távolságok:
Az első egy alkalmas válogató tömbök elegendően hosszú, a második sokkal kényelmesebb rövid. Ezért fogunk állítani rajta (aki szeretne programozni az első lehetőséget kap arra, hogy tegye meg a szükséges változások végrehajtására vonatkozó szövegét algoritmust).
Hogyan határozzuk meg a kezdeti érték t (és vele együtt természetesen és kt)?
Akkor, természetesen, lépésről lépésre, hogy ellenőrizze, hogy a izolátumot rendezett tömbben alszekvencia (legalább hossza 2) a távolság 1, 3, 7, 15, stb közötti elemei. Azonban ez a módszer meglehetősen hatékony. Mi jár másképp, mert van egy képletet kt = 2 t -1.
Így a hossza a tömb (N) közé kell esnie ezeken a határokon:
vagy ami ugyanaz,
2 t <= N <2 t+1
Logaritmusa ilyen egyenlőtlenségek (bázis 2):
t <= log N Így, világossá vált, hogy t kiszámítható a következő képlettel: Sajnos, a nyelv Pascal csak lehetővé teszi a alapú logaritmusa e (természetes logaritmus). Tehát meg kell emlékezni a megszokott középiskolás során általában „átalakítás” logaritmus: Ebben az esetben, m = 2, Z = E. Így, így kapjuk a kezdeti t: Azonban, ezzel a T része az alszekvencia hosszúságú lesz a 2, és egy részét - és 1 rendezése ilyen alszekvencia nincs szükség, ezért, nem azonnal vissza egy további 1 lépés: A elemei közötti távolság bármely al-szekvenciát a következőképpen számítjuk ki: A számos al-szekvenciák pontosan azonos lesz a k. Tény, hogy mind az első k elemet a kiindulási pont a következő alszekvenciája. És aztán, kezdve (k + 1) -edik, valamennyi elem már tagjai néhány korábban megjelent alszekvenciát, akkor nem az új alszekvencia nem lesz képes elindítani a közepén a tömb. Hány tételek szerepelnek az egyes alszekvenciája? A válasz az, hogy ha a hossza a teljes rendezve szekvencia (N) osztható lépésben k maradék nélkül, akkor az összes al-szekvencia hossza azonos, nevezetesen: Ha n nem osztható egyenletesen k lépéssel, az első p alszekvencia hosszabb lesz 1-gyel, hogy hány ilyen „hosszúkás” alszekvencia egybeesik a hossza a „farok” - modulo N lépésben a k: