Alqoritmlər və məlumat quruluşları. Birbaşa Sırala Birbaşa Sırala c

Sıralama, yaddaşdakı məlumatların seçilmiş parametrə uyğun olaraq nizamlı bir şəkildə təşkil edilməsidir. Müntəzəmlik, bir məlumat dəyərinin başından sonuna qədər dəyərinin artması (azalması) hesab olunur.

Məlumatları emal edərkən məlumatların məlumat sahəsini və onların maşında yerləşdirilməsini bilmək vacibdir.

Daxili və xarici sıralamaları ayırd edin:

Daxili çeşidləmə - sıralamaq təsadüfi giriş yaddaşı;

Xarici sıralama - xarici yaddaşda sırala.

Sıralanacaq qeydlər böyük miqdarda yaddaş tutarsa, onları daşımaq bahadır. Bunları azaltmaq üçün çeşidləmə aparılır əsas ünvan cədvəli, yəni göstəricilər yenidən təşkil edilir, lakin massivin özü köçürülmür. O - ünvan cədvəlini sıralamaq üsulu.

Sıralama zamanı eyni düymələrə rast gəlmək olar. Bu vəziyyətdə, çeşidləndikdən sonra, eyni düymələri mənbə faylında olduğu kimi düzmək məsləhətdir.O - davamlı çeşidləmə.

Yalnız əlavə RAM istifadə etməyən növləri nəzərdən keçirəcəyik. Belə növlərə deyilir "eyni yerdə".

Çeşidləmə səmərəliliyi bir neçə meyara görə nəzərdən keçirilə bilər:

Sıralamağa sərf olunan vaxt;

Sıralamaq üçün lazım olan RAM miqdarı;

Proqramın proqram yazmaq üçün sərf etdiyi vaxt.

Birinci meyarı seçək. Sıralamağa sərf olunan vaxtın ekvivalenti hesab edilə bilər müqayisə sayıhərəkətlərin sayıçeşidləyərkən.

Sıralama zamanı müqayisə və yerdəyişmə sayının sırası içəridədir

O (n log n) -dən O (n 2) -ə;

O (n) ideal və əlçatmaz bir haldır.

Aşağıdakı çeşidləmə üsulları fərqlənir:

Sərt (birbaşa) üsullar;

Təkmilləşdirilmiş üsullar.

Sərt üsullar:

Birbaşa əlaqə üsulu;

Birbaşa seçim üsulu;

Birbaşa mübadilə üsulu.

Ciddi metodların effektivliyi təxminən eynidir.

Birbaşa daxiletmə üsulu ilə sırala

Elementlər zehni olaraq hazır bir a 1, ..., a i-1 və orijinal ardıcıllığa bölünür.

Hər addımda, i = 2 ilə başlayaraq və hər dəfə bir dəfə artıraraq, orijinal ardıcıllıqdan çıxarılır i-ci element və bitmiş ardıcıllığa köçürülür, istədiyiniz yerə daxil edilir.

Alqoritmin mahiyyəti belədir:

i = 2 -dən n -ə qədər

X = a (i)

(1) ... a (i) arasında x daxil etmək üçün bir yer tapırıq

sonrakı i


Birbaşa daxiletmə üsulu ilə sıralamaq üçün iki alqoritm var. Birincisi maneəsizdir

Maneəsiz birbaşa daxiletmə sıralama alqoritmi

i = 2 -dən n -ə qədər

X = a (i)

J = i - 1 üçün 1 -ə enir

Əgər x< a(j)

Sonra a (j + 1) = a (j)

Başqa L -ə gedin

Endif

Sonrakı j

L: a (j + 1) = x

sonrakı i

qayıt

Yuxarıdakı alqoritmin dezavantajı texnologiyanın pozulmasıdır strukturlaşdırılmış proqramlaşdırma, qeyd -şərtsiz atlamalardan istifadə etmək arzuolunmazdır. Daxili döngə kimi təşkil edilərsə döngə zamanı, sonra açarların mənfi dəyərləri ilə əhəmiyyətin itirilməsi və kompüterin "donması" baş verən bir "maneə" qurmaq lazımdır.

Bir maneə ilə birbaşa daxil olaraq sıralama alqoritmi

i = 2 -dən n -ə qədər

X = a (i)

A (0) = x (a (0) - maneə)

J = i - 1

X -də< a(j) do

A (j +1) = a (j)

J = j - 1

Sonda

A (j +1) = x

sonrakı i

qayıt

Birbaşa daxiletmə alqoritminin səmərəliliyi

İ-ci seçimdə Ci əsas müqayisə sayı ən çox i-1, ən az 1; N düymələrinin bütün permütasyonlarının eyni ehtimal olduğunu düşünsək, ortalama müqayisə sayı = i / 2. Transferlərin sayı Mi = Ci + 3 (maneə daxil olmaqla). Minimum ballar əvvəlcədən sifariş edilmiş elementlərin ardıcıllığı halında, ən pis ballar isə əvvəlcə yerləşdirildikdə tapılır. tərs qaydada... Bir mənada daxiletmə sıralaması həqiqətən təbii davranışı nümayiş etdirir. Verilən alqoritmin sabit sıralama prosesini təsvir etdiyi aydındır: bərabər düymələri olan elementlərin sırası dəyişməz olaraq qalır.

Ən pis vəziyyətdə müqayisə sayı, sıra əks istiqamətdə sıralananda C max = n (n - 1) / 2, yəni - O (n 2). Permütasiya sayı M max = C max + 3 (n-1), yəni. - O (n 2). Array artıq sıralanıbsa, müqayisə və permütasiyaların sayı minimaldır: C min = n-1; M min = = 3 (n-1).

Birbaşa mübadilə ilə sırala (baloncuk sıralama)

Bu bölmədə iki elementin yerlərinin dəyişdirilməsinin prosesin xarakterik bir xüsusiyyəti olduğu bir üsul təsvir edilir. Aşağıda təsvir edilən birbaşa mübadilə alqoritmi bir -birinə bitişik elementlərin yerlərini müqayisə etməyə və dəyişdirməyə və bütün elementlər qaydasında olana qədər bu prosesi davam etdirməyə əsaslanır.

Qalan ardıcıllığın ən kiçik elementini hər dəfə dizinin sol ucuna köçürdükdə dizi boyunca təkrar edirik. Diziləri üfüqi quruluşlardan daha çox şaquli hesab etsək, elementlər hər birinin çəkisi açarına uyğun olaraq bir su qabında olan baloncuklar kimi şərh edilə bilər. Bu vəziyyətdə, hər keçiddə bir baloncuk sanki çəkisinə uyğun bir səviyyəyə qalxır (aşağıdakı şəkildəki şəklə baxın).

C min = n - 1, sifariş O (n),

və heç bir hərəkət yoxdur

Birbaşa çeşidləmə üsullarının müqayisəli təhlili göstərir ki, klassik formada "çeşidləmə" mübadiləsi daxilolmaların köməyi ilə və seçimin köməyi ilə çeşidləmə arasında bir xaçdır. Yuxarıdakı təkmilləşdirmələrlə, bubble sort hətta ağlabatan şəkildə sıralanan seriallar üçün bir üstünlüyə malikdir.

Bu texnika ümumiyyətlə bubble sort kimi tanınır.


Birbaşa mübadilə metodu alqoritmi

j = n -i addımı üçün -1

əgər a (j)< a(j - 1) then

Bizim vəziyyətimizdə bir keçid "boş" var. Üçün bir daha elementlərə baxmayın, yəni müqayisə aparmaq, buna vaxt ayırmaq, onay qutusuna girə bilərsiniz fl mənada qalır yalan növbəti keçid zamanı heç bir mübadilə edilmirsə. Aşağıdakı alqoritmdə əlavələr qalın rənglə işarələnmişdir.

fl = doğru

fl = yalan olarsa geri qayıdın

fl = yalan

j = n -i addımı üçün -1

əgər a (j)< a(j - 1) then

fl = doğru

Baloncuk metodunun təkmilləşdirilməsi, hər ötürmədən sonra daxili döngədə istiqamətin tərsinə çevrildiyi shaker çeşididir.

Birbaşa mübadilə sıralama alqoritminin səmərəliliyi

Müqayisə sayı C max = n (n-1) / 2, sifariş O (n 2).

Yerdəyişmələrin sayı M max = 3C max = 3n (n-1) / 2, sifariş O (n 2).

Array artıq sıralanıbsa və bayraqlı alqoritm tətbiq olunarsa, yalnız bir keçid kifayətdir və sonra minimum müqayisə sayını əldə edirik

Daxil etmə sıralaması, sadə seçim sıralaması kimi, ümumiyyətlə dublikat elementləri olmayan seriallar üçün istifadə olunur.

Bu üsulla çeşidləmə ardıcıl olaraq addım -addım aparılır. Aktivdir k-Üçüncü addım, serialın birincisini ehtiva edən hissəsidir k - 1 maddə artıq sifariş verilmişdir, yəni.

Sonra, götürməlisiniz k- Bu elementi sıranın sıralanmış hissəsində bir yer seçin ki, daxil edildikdən sonra sifariş pozulmasın, yəni belə tapasınız. Sonra elementi daxil etməlisiniz a (k) tapılan yerə.

Hər addımda dizinin sıralanmış hissəsi böyüyür. Tam bir sıralamaq üçün bunu etməlisiniz n- Addım 1.

Bir element üçün uyğun bir yer necə tapılacağı sualına cavab vermək qalır NS... Aşağıdakı kimi davam edəcəyik: solunda yerləşən elementləri nəzərdən keçirəcəyik NS(yəni artıq sifariş verilənlər), serialın əvvəlinə keçir. Maddələrə baxmaq lazımdır a (j), j dən dəyişir k - l -dən 1. Aşağıdakı şərtlərdən biri yerinə yetirildikdə bu tarama sona çatacaq:

Daxil etmək lazım olduğunu göstərən bir element tapıldı NS və arasında a (j).

Dizinin sifariş edilmiş hissəsinin sol ucuna çatıldı, buna görə daxil etməlisiniz NS birinci yerə.

Bu şərtlərdən biri yerinə yetirilənə qədər, baxılan elementləri 1 mövqedə sağa keçirəcəyik, nəticədə sıralanmış hissədə yer boşalacaq. NS.

Çeşidləmə texnikası Cədvəl 2 -də göstərilmişdir:

Cədvəl 2 - Birbaşa daxil etmədən istifadə edərək çeşidləmə nümunəsi

İlk sifariş olunan ardıcıllıq 1 -ci element 9. Elementdən ibarətdir a ( 2) = 5 sıralanmamış ardıcıllığın birincisidir və 5 -dir< 9, поэтому ставится на его место, а 9 сдвигается вправо. Теперь упорядоченная последовательность состоит из двух элементов 5, 9. Элемент a ( 3) = Sıralanmamış ardıcıllığın 15 -i sıralanan ardıcıllığın bütün elementlərindən daha böyükdür, buna görə də sıralanan ardıcıllıq öz yerində qalır və növbəti addımda sıralanan ardıcıllıq 5, 9, 15 -dən ibarətdir və nəzərdən keçirilən element 6 -dır. ardıcıllıq əmr edilənə qədər proses davam edir.

Shaker çeşidlənməsi

Baloncuk metodunda üç sadə təkmilləşdirmə var. Birincisi, əgər bir addımda heç bir mübadilə edilməmişsə, alqoritmin icrasına xitam verilə bilər. İkincisi, cari addımda permütasiyaların aparıldığı dizi indeksinin ən kiçik dəyərini xatırlaya bilərsiniz. Aydındır ki, bu indeksi olan elementə qədər olan serialın yuxarı hissəsi artıq sıralanmışdır və növbəti addımda bu indeks dəyərinə çatanda qonşu elementlərin dəyərlərini müqayisə etməyi dayandıra bilərsiniz. Üçüncüsü, baloncuk metodu "yüngül" və "ağır" dəyərlər üçün qeyri -bərabər işləyir. İşıq dəyəri bir addımda doğru yerə çatır və ağır dəyər hər addımda doğru yerə doğru bir mövqe düşür.

ShakerSort metodu bu müşahidələrə əsaslanır. Tətbiq edərkən, hər növbəti addımda ardıcıl baxış istiqaməti dəyişir. Nəticədə, bir addımda növbəti ən yüngül element "açılır", digərində isə ən ağır element "batır". Çalkalayıcı növünün nümunəsi Cədvəl 3 -də göstərilmişdir.

Cədvəl 3 - Çalkalayıcı çeşid nümunəsi

Azalan məsafələr olan daxilolmaları istifadə edərək bir sıra sıralamaq (Shell metodu)

D. Schell, birbaşa daxil etmədən istifadə edərək çeşidlənmənin yaxşılaşdırılmasını təklif etdi.

Metodun ideyası: serialın bütün elementləri qruplara bölünür ki, hər bir qrup müəyyən sayda mövqe ilə bir -birindən aralı olan elementləri özündə birləşdirsin. L... Hər qrupun elementləri sıralanır. Bundan sonra bütün elementlər yenidən birləşdirilir və qruplara ayrılır, elementlər arasındakı məsafə azalır. Elementlərin sıralanması aralarındakı məsafə 1 -ə bərabər olduqdan sonra proses başa çatır.

Shell çeşidlənməsi nümunəsi Cədvəl 4 -də göstərilmişdir.

Cədvəl 4 - Shell çeşidlənməsi nümunəsi

Birincisi, ilkin dəyər olduqda seçimi nəzərdən keçirin L serialdakı elementlərin sayının yarısına bərabərdir və hər bir sonrakı dəyər əvvəlkisinin yarısıdır. Unutmayın ki, elementlər bir -birindən uzaqdır. Əgər 2 elementi müqayisə edərkən mübadilə baş verməyibsə, müqayisə olunan elementlərin yerləri bir mövqe ilə sağa köçürülür. Mübadilə baş verərsə, müvafiq müqayisə olunan elementlər tərəfindən dəyişdirilir L.

Bölünmüş Sıralama (Tez Sıralama)

Bölmə üsulu Charles Hoare tərəfindən təklif edilmişdir. Bu üsul sadə mübadilə metodunun inkişafıdır və o qədər təsirlidir ki, "Quicksort" metodu olaraq tanındı.

Alqoritmin əsas fikri, massivin bəzi elementlərinin təsadüfi seçilməsidir x, bundan sonra bir sıra qarşılaşılana qədər sıra soldan taranır a (i) belə a (i) > x və sonra elementlə qarşılaşana qədər sıra sağdan taranır a (i) belə a (i)< x... Bu iki element dəyişdirilir və elementə çatana qədər baxmaq, müqayisə etmək və mübadilə etmək prosesi davam edir x... Nəticədə, sıra iki hissəyə bölünəcək - sol hissədə əsas dəyərlər daha az olacaq x və əsas dəyərləri daha böyük olan doğru x... Proses daha sonra hər bir hissədə tam olaraq bir element olana qədər serialın sol və sağ hissələri üçün rekursiv olaraq davam edir. Müvafiq sıra indekslərini xatırlayırsınızsa, rekursiya təkrarla əvəz edilə bilər.

Bir massivin sürətli metodla sıralanma prosesi Cədvəl 5 -də göstərilmişdir.

Cədvəl 5 - Sürətli çeşidləmə nümunəsi

Daxil etmə sıralaması sıralanmamış pozitiv tam ədədlərin (ümumiyyətlə açar adlanır) siyahısı üzərində işləyir və onları artan sıraya görə sıralayır. Bu, əksər oyunçuların hər dəfə bir kart götürərək onlara verilən kartları təşkil etməsi ilə eyni şəkildə edilir. Ümumi prosedurun necə işlədiyini aşağıdakı səkkiz ədəddən ibarət sıralanmamış siyahı nümunəsi ilə göstərək:

27 412 71 81 59 14 273 87.

Sıralanmış siyahı yenidən yaradılır; əvvəlcə boşdur. Hər təkrarlama zamanı sıralanmamış siyahının ilk nömrəsi ondan silinir və sıralanmış siyahıda müvafiq mövqedə yerləşdirilir. Bunu etmək üçün, sıralanmış siyahı, ən kiçik rəqəmdən başlayaraq, yeni nömrə üçün uyğun bir yer tapılana qədər taranır. aşağı dəyərləri olan bütün çeşidlənmiş nömrələr onun qarşısında və böyük dəyərləri olan bütün ədədlər ondan sonra gələnə qədər. Aşağıdakı siyahı ardıcıllığı bunun necə edildiyini göstərir:

Təkrar 0

27 sıralanıb

Təkrar 1 Sıralanmamış 412 71 81 59 14 273 87

Çeşid 27.412

Təkrar 2 Sıralanmamış 71 81 59 14 273 87

Müxtəlif 27 71 412

Təkrar 3 Sıralanmamış 81 59 14 273 87

Çeşid 27 71 81 412

Təkrar 4 Sıralanmamış 59 14 273 87

Çeşidli 27 59 71 81 412

Təkrar 5 Sıralanmamış 14 273 87

Sıralanmışdır 14 27 59 71 81 412

Təkrar 6 Sıralanmamış 273 87

Sıralanıb 14 27 59 71 81 273 412

Təkrar 7 Sıralanmamış 87

Sıralanmışdır 14 27 59 71 81 87 273 412

Aşağıdakı alqoritmdə yalnız bir siyahı işə salınır və nömrələr köhnə siyahıda yenidən düzülür.

SIS alqoritmi(Birbaşa daxil olaraq sırala). I (1), I (2) tam ədədlərinin ardıcıllığını köhnə yerdə sıralayın. ... ... , I (N) artan qaydada.

Addım 1.[Əsas iterasiya]

J üçün 2 N. keçmək addım 4 od ; DUR.

Addım 2.[Növbəti tamsayı seçin] Ayarla K ← I (J); L ← J - 1.

Addım 3.[Sıralanmış tam ədədlərlə müqayisə] İsə K

VƏ L≥1 qurmaq Mən (L + 1) I (L); L - L - 1 od

Addım 4.[Açılır] Ayarla I (L + 1) ← K.

QUICKSORT:Orta işləmə müddəti ilə çeşidləmə alqoritmi O (N ln N)

SIS alqoritminin yavaş işləməsinin əsas səbəbi, düymələr arasındakı bütün müqayisə və mübadilənin ardıcıl olmasıdır 1, 2,. ... ... və N. bitişik elementlərin cütləri üçün baş verir. Bu üsul nisbətən böyük tələb edir

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Satırlar 38 08 16 06 79 76 57 24 56 02 58 48 04 70 45 47 Fəaliyyət

1 38 47 j -də azalma



5 04 38 mübadilə

6 08 38 artım i

10 38 79 mübadilə

14 02 38 mübadilə

15 76 38 artım i,>

16 38 76 mübadilə

17 38 56 azalma j

19 24 38 mübadilə

20 57 38 artım i,>

21 38 57 mübadilə, azalma

22 04 08 16 06 02 24 38 57 56 76 58 48 79 70 45 47

(1 2 3 4 5 6) 7 (8 9 10 11 12 13 14 15 16)


bir açarı yerinə qoymağın vaxtı gəldi arzu olunan mövqe sıralanmaq üçün. Ardıcıl olaraq bir -birindən uzaq olan elementləri müqayisə edərək bu prosesi sürətləndirməyə çalışmaq təbiidir.

K. Hoore, bu fikri (QUICKSORT alqoritmi) icad etdi və çox təsirli şəkildə tətbiq etdi, SIS alqoritminin O (N 2) sırasından O (N ln N) sırasına qədər orta işləmə müddətini azaldıb. Bu alqoritmi aşağıdakı nümunə ilə izah edək.

Fərz edək ki, Şəkil 1 -də birinci sətirdən bir sıra ardıcıllığını sıralamaq istəyirik. 15. Gümanla başlayaq birinci bu ardıcıllıqdakı açar (38), nəticədə sıralanmış ardıcıllığın ortasında görünəcək açarın yaxşı bir yaxınlaşması kimi xidmət edir. Bu dəyəri düymələrin dəyişdirilə biləcəyi bir pivot olaraq istifadə edirik və aşağıdakı kimi davam edirik. Soldan başladığım I və J iki göstərici qoyduq (I = 1) və J - soldan (J = N). Müqayisə olunur a məna J.... Əgər a I ≤a J, J ← J - 1 təyin edin və aşağıdakı müqayisə edin. Davam edirik azaltmaq J çatana qədər mən> a J. Sonra dəyişək a I ↔a J.(Şəkil 15, xətt 5, 38 və 04 düymələrinin dəyişdirilməsi), I ← I + 1 seçin və davam edin artırmaq Alana qədər mən mən> a J. Növbəti mübadilədən sonra (sətir 10, 79↔38), yenidən J -ni azaldırıq. J -ni azaltmaqla I -ni artırmaqla, I = J -ni əldə edənə qədər bu prosesi ardıcıllığın hər iki ucundan "ortasına" qədər davam etdiririk.



İndi iki fakt var. Birincisi, əvvəlcə birinci mövqedə olan açar (38) bu vaxta qədər sıralanmış ardıcıllıqla öz yerindədir. Birincisi, bu elementin solundakı bütün düymələr daha kiçik və sağdakı bütün düymələr böyük olacaq.

Eyni prosedur, bütün ardıcıllığın son sıralanması üçün sol və sağ alt hissələrə tətbiq edilə bilər. Şəkil 15 -dəki son xətt (22 nömrəli) göstərir ki, I = J alındıqda, I = 7 olur. Bundan sonra prosedur (1,6) və (8,16) ardıcıllıqlarına yenidən tətbiq olunur.

Alqoritmin rekursiv təbiəti göstərir ki, iki sıralanmamış ardıcıllığın daha böyük elementlərinin (8,16) indekslərinin dəyərləri yığının üzərinə qoyulmalı və daha sonra kiçik ardıcıllığı sıralamağa davam edilməlidir (1,6) ).

Şəkil 15 -də 4 -cü sətirdə, 04 sayı 2 -ci mövqeyə keçdi və (1,1) və (3,6) ardıcıllıqları sıralanmalıdır. (1,1) artıq sıralandığından (02 nömrəsi), (3,6) sıralayırıq ki, bu da öz növbəsində (3,4) və (6,6) sıralanacaq 6 -cı sətirə gətirib çıxarır. 7 -ci sətirdə ardıcıllıq (1,6) sıralanır. İndi (8,16) yığından çıxarırıq və bu ardıcıllığı sıralamağa başlayırıq. 13 -cü sətirdə sıralanması lazım olan ardıcıllıqlar (8,11) və (13,16) var. Yığın üzərinə (13,16) qoyduq, sıraladıq (8,11) və s. 20 -ci sətirdə bütün ardıcıllıq sıralanır.

QUICKSORT alqoritmini rəsmi olaraq təsvir etməzdən əvvəl, necə işlədiyini tam olaraq göstərməlisiniz. Sıralanmamış ardıcıllıqların ən sol və sağ elementlərinin indekslərini saxlamaq üçün [LEFT (K), RIGHT (K)] yığını istifadə edirik. Qısa ardıcıllıqlar normal alqoritmdən istifadə edərək daha sürətli sıralandığından, QUICKSORT alqoritmində ardıcıllığın adi qaydada sıralanması üçün nə qədər qısa olması lazım olduğunu təyin edən M giriş parametri var.

Axtar

İndi isə məlumat strukturları ilə bağlı məlumatların axtarışı ilə bağlı bəzi əsas problemlərin araşdırılmasına keçək. Əvvəlki çeşidləmə bölməsində olduğu kimi, bütün məlumatların əsas dəyərlərlə müəyyən edilə bilən qeydlərdə saxlanıldığını güman edəcəyik, yəni. rekord R i, K i ilə göstərilən açar dəyərinə uyğundur.

Faylın təsadüfi bir şəkildə xətti bir sıra şəklində N qeydləri ehtiva etdiyini düşünək. Verilən bir girişi tapmağın açıq yolu, düymələri təkrarlamaq olacaq. Lazım olan açar tapılarsa, axtarış uğurla başa çatır; əks halda bütün düymələr taranacaq və axtarış uğursuz olacaq.Əgər düymələrin mümkün olan bütün sifarişləri eyni ehtimaldırsa, belə bir alqoritm həm ən pis, həm də orta hallarda O (N) əsas əməliyyatları tələb edir. Fayl düymələri ilə əvvəlcədən sifariş verilərək axtarış müddəti nəzərəçarpacaq dərəcədə azaldıla bilər. Fayl kifayət qədər böyükdürsə və tez -tez əldə edilirsə, bu ilkin iş mənalıdır.

Faylın ortasına getdiyimizi və orada K i açarını tapdığımızı düşünək. K və K i -ni müqayisə edək. Əgər K = K i olarsa arzu olunan giriş tapıldı. Əgər K.<К i ,то ключ К должен находиться в части файла, предшествующей К i (если запись с ключом К вообще существует) . Аналогично, если К i <К, то дальнейший поиск следует вести в части файла, следующей за К i . Если повторять эту процедуру проверки ключа К i из середины непросмотренной части файла, тогда каждое безуспешное сравнение К с К i будет исключать из рассмотрения приблизительно половину непросмотренной части.

Bu prosedurun bir sxemidir ikili axtarış, Şəkil 16 -da göstərilmişdir

Alqoritm BSEARCH (İkili axtarış), açarları K 1 artan qaydada sıralanan N≥2 qeydli bir sənəddə K açarı olan bir qeyd axtarın.<К 2 …<К N .

Addım 0.[Başlanğıc] AyarlaİLK ← 1; SON ← N. (İLK və SON, faylın hələ baxılmamış hissəsindəki ilk və son düymələrə işarədir.)

Addım 1.[Əsas döngə] İsə SON ≥BİRİNCİ keçmək addım 4 od

Addım 2.[Mərkəzi açar əldə etmək] Ayarla I ← | _ (İLK + SON) / 2_ | . (K i, faylın hələ baxılmamış hissəsinin ortasında və ya ortasında solda yerləşən açardır.)

Addım 3.[Müvəffəqiyyətli olub olmadığını yoxlayın] Əgər K = K I sonra PRINT "Uğurlu tamamlama, əsas K I"; DUR fi.

Addım 4.[Müqayisə] Əgər K < K I sonra qurun SON ← I-1 başqa qurmaqİLK ← I + 1 fi.

Addım 5.[Axtarış uğursuz oldu] Çap et "uğursuz"; DUR.

Şəkil 17 -də K = 42 tapmaq üçün BSEARCH alqoritmi istifadə olunur.

İkili axtarış, sifariş edilmiş bir faylı ikili bir ağac olaraq təmsil etmək üçün də istifadə edilə bilər. 2 -ci addımın ilk icrasında tapılan əsas dəyər (K (8) = 53) ağacın köküdür. Bu dəyərin sola (1,7) və sağa (9,16) olan əsas aralıqları yığının üzərinə itələyir. Üst zibil yığını atılır və 2 -ci addım orta elementi (və ya ortanın solundakı elementi) tapır. Bu açar (K (4) = 33), kökündən sonra dəyəri, kökün dəyərindən az olarsa, soldan sonrakı elementə çevrilir, əks halda sağın yanındadır. Yeni əlavə edilən düymənin [(1,3), (5,7)] sağ və solunda bu intervalın alt intervalları artıq yığının üzərinə sıxılır.Bu prosedur yığın boşalana qədər təkrarlanır. Şəkil 18, Şəkil 17 -dəki 16 sifarişli düymələr üçün tikiləcək ikili bir ağacı göstərir.

İkili axtarış indi bu ağacın kökündən istədiyiniz qeydə keçməsi kimi şərh edilə bilər. Son nöqtəyə çatdıqda və göstərilən açar tapılmadıqda, bu faylda lazımlı giriş yoxdur. Diqqət yetirin ki, kökündən verilən K açarına qədər olan tək bir yolda təpələrin sayı, KSE -ni tapmağa çalışarkən BSEARCH alqoritminin yerinə yetirdiyi müqayisə sayına bərabərdir.

Bəli

Lazımi təriflər və sıralamaların təsnifatı.

Sıralama. Lazımi təriflər və sıralamaların təsnifatı. Birbaşa daxiletmə və seçim növləri. Onların effektivliyi

Sıralama Məlumatların açarlarına uyğun olaraq nizamlı bir şəkildə yerləşdirilməsidir. Beləliklə, məlumatları emal edərkən məlumatların məlumat sahəsini və maşında yerləşdirilməsini bilmək vacibdir. Buna görə fərqləndirin daxili(RAM -da çeşidləmə) və xarici sıralama(xarici yaddaşda çeşidləmə). Müntəzəmlik elementlərin düzülüşü, əsas dəyərin dizinin başından sonuna qədər artması (azalması) dır.

Sıralanacaq qeydlər böyük miqdarda yaddaş tutarsa, onları daşımaq bahadır. Onları azaltmaq üçün istifadə edin ünvan cədvəlinin çeşidlənməsi üsulu... Bu üsulda istifadə olunur əsas ünvan cədvəli... Göstəricilər yenidən düzəldilir, yəni. Dizinin özü hərəkət etmir. Sıralama zamanı eyni düymələrə də rast gəlmək olar. Bu halda, mənbə faylında olduğu kimi sıralanandan sonra eyni düymələri təşkil etmək arzu edilir. Bu prinsip istifadə olunur davamlı çeşidləmə.

Çeşidləmə səmərəliliyinə bir neçə meyardan baxmaq olar:

1) çeşidləmə üçün sərf olunan vaxt;

2) çeşidləmə üçün lazım olan RAM miqdarı;

3) proqramı yazmaq üçün proqramçı tərəfindən sərf olunan vaxt.

Sıralamaq üçün lazım olan vaxt, çeşiddəki müqayisələrin sayı və maddə hərəkətlərinin sayı ilə mütənasibdir.

Sıralama zamanı müqayisə nömrəsinin sırasının aralığında ola biləcəyi düşünülür o (gündüz)əvvəl o (n 2), harada o (n)- ideal və əlçatmaz bir hal.

Çeşidləmə üsullarını belə təsnif etmək olar:

1) sərt (birbaşa) üsullar(onların effektivliyi təxminən eynidır):

· birbaşa daxiletmə;

· birbaşa seçim;

· birbaşa mübadilə;

2) təkmilləşdirilmiş üsullar.

Həyatda bu sıralama prinsipi solitaire oyunları oynayarkən, bir mənzili təmizləyərkən, bir dəstə qarışıq əşyanı düzgün qaydada təşkil etmək lazım olduqda və s. Məlumat sifariş etmək üçün çox təbii bir çeşidləmə üsulu tətbiq edilmişdir.

Elementlər zehni olaraq hazır bir ardıcıllığa bölünür a 1, ..., i-1 və orijinal sıra. Bitmiş ardıcıllıqla, elementlər müəyyən bir qaydada (azalan və ya artan) düzülmüşdür. Və orijinal ardıcıllıqla sıralanması lazım olan elementlər var. Hər addımda orijinal ardıcıllığın elementləri bir azalır, bitmiş isə bir artırılır. Bu, orijinal ardıcıllığın çıxarılması ilə əlaqədardır mən- ci element və hazır ardıcıllığın elementləri arasında doğru yerə qoyularaq köçürülür.

10, 3, 11, 8, 2, 15, 44, 9 elementlərinin ardıcıllığına birbaşa daxiletmə üsulu ilə çeşidləmə nümunəsinə nəzər salın (Cədvəl 11.1). Artan qaydada sıralamaq lazımdır.

Əvvəlcə bitmiş ardıcıllığın heç bir elementi yoxdur. İlk addımda, 10 olan orijinal ardıcıllığın ilk elementi bitmiş ardıcıllığın ilk elementi olur. Sonra ikinci addım: orijinal ardıcıllığın 3 -cü elementi bitmişə yerləşdirilir. Belə gedir. Element 10 -dan böyükdürsə, o, öz yerində qalır və daha azdırsa, 10 bir tərəfə sağa köçürülür və element öz yerinə qoyulur. 3 -dən bəri<10, то готовая последовательность теперь будет иметь вид: 3, 10, а исходная – 11, 8, 2, 15, 44, 9. Далее на третьем шаге из исходной последовательности выбирается 11 и помещается в готовую последовательность. Сначала 11 сравнивается с 10, и так как 11>10, sonra 11 yerində qalır. Orijinal ardıcıllıq indi: 8, 2, 15, 44, 9. Sonrakı addımlar eyni şəkildə aparılır.

Cədvəl 11.1

Birbaşa Sıralama Necə Çalışır

Bu sıralamadakı addımların sayı (Cədvəl 11.1) sıralanmış ardıcıllıqdakı elementlərin sayına bərabərdir, yəni. 8 addım = 8 element.

Bu metodu tətbiq etməyin iki yolu var - maneəsizdir (Şəkil 11.1) və maneə ilə (Şəkil 11.2).

işin məqsədi Birbaşa daxiletmə üsulu ilə bir sıra sıralamasını araşdırın və bu alqoritmin səmərəliliyini qiymətləndirin.

Ümumi məlumat

Daxil etmə sıralaması, sadə seçim sıralaması kimi, ümumiyyətlə dublikat elementləri olmayan seriallar üçün istifadə olunur. Bu üsulla çeşidləmə ardıcıl olaraq addım -addım aparılır. K-ci addımda, dizinin ilk k-1 elementlərini ehtiva edən hissəsinin artıq sifariş verildiyi düşünülür, yəni. Sonra, k-ci elementi götürməlisiniz və dizinin sıralanmış hissəsində bir yer tapmalısınız ki, daxil etdikdən sonra sifariş pozulmasın, yəni belə tapasınız. Sonra tapılan yerə a [k] elementini daxil etməlisiniz. Hər addımda dizinin sıralanmış hissəsi böyüyür. Tam çeşidləmə n-1 addımları tələb edir. X elementi üçün uyğun bir yerin necə tapılacağı sualına cavab vermək qalır. Aşağıdakı kimi davam edək: dizinin əvvəlinə keçərək x -in solunda yerləşən elementləri (yəni artıq sifariş verilənləri) nəzərdən keçirəcəyik. A [j], j elementlərini kl -dən 1 -ə dəyişməlisiniz. Bu tarama aşağıdakı şərtlərdən biri yerinə yetirildikdə sona çatacaq: a [j] elementi tapıldı Nümunə Sıralama alqoritminin bir hissəsini birbaşa daxil etməklə qısaca təsvir edin: K: = 2 to n do start x: = a [k] üçün; j: = k-1; (x, a, ..., a [k] -də uyğun bir yerə daxil edin) (bunun üçün yerinə yetirilən bir döngə təşkil edirik) (j> 0 və x

Nəzarət vəzifəsi

Eyni dizinin ilk mənfi elementindən sonra bir sıra son elementini daxil etmək üçün bir proqram yazın.

İş seçimləri

DİQQƏT !!! Açıq şəkildə başqa cür göstərilmədiyi təqdirdə, giriş məlumatları (mənbə dizisi) və çıxış məlumatları (sıralanan massiv) tam ədədləri ehtiva edən bir mətn faylı olaraq formalaşdırılmalıdır! Bütün vəzifələr üçün əvvəlcə birbaşa daxiletmə metodundan istifadə edərək serialın sıralanması üçün bir prosedur yazın. 1. Sizə n elementdən ibarət bir sıra verilir. Onları artan qaydada sıralayın, hər hansı bir dublikat atın. 2. Verilmiş bir seriyanın modasını müəyyənləşdirin - elementləri arasında ən çox rast gəlinən məna. 3. Orijinal məlumat dəsti, soyadı, yaşı və karyerasından ibarət olan qeydlər ardıcıllığıdır. Bu siyahını çap edin: 1) əlifba sırası ilə; 2) yaş artdıqca; 3) iş təcrübəsinin artırılması üçün. 4. Azalan qaydada sıralama proseduru yazın. 5. Bir sıra tam ədədlər verilir. Bu seriyadakı bütün fərqli nömrələri artan qaydada alın. 6. Sizə n fərqli tam ədədlər silsiləsi verilir. Fərqli tam ədədlər əldə edin 7. Bütün ədədlər verilir, dəyəri ilə bütün şərtləri atdıqdan sonra bu ardıcıllıqla ən böyük dəyəri tapın 8. Təbii olaraq verilir Nömrələr 100 metr məsafəyə qaçışda saniyənin yüzdə biri ilə ölçülmüş n idmançının nəticələridir. 4x100 estafetində iştirak etmək üçün ən yaxşı dörd qaçışdan ibarət bir komanda yaradın, yəni dörd natural ədəddən birini göstərin i, j, k, l elə bir məbləğ ən az dəyərə malikdir. 9. Koordinatları (xi; yi) olan, n müstəqil təsadüfi nöqtələr verilərək, başlanğıc mərkəzli 1 radiuslu bir dairədə bərabər paylanmışdır. Nöqtələri mərkəzdən artan məsafədə düzən bir proqram yazın. 10. Sizə n müsbət iki rəqəmli tam ədəd verilir. Hər bir nömrəni 0-9 aralığından bir cüt rəqəm kimi qəbul edərək, onları (rəqəmləri) artan qaydada sıralayın. 11. Təyyarədə n nöqtə yoxdur. Bütün bu nöqtələrdən keçən (n-1) əlaqəli öz-özünə kəsişməyən qapalı polyline göstərin. (Polilinin qonşu seqmentlərinin bir düz xətt üzərində uzanmasına icazə verilir.) İpucu. Ən sol nöqtəni (yəni ən kiçik x koordinatlı nöqtəni) götürün və ondan bütün digər nöqtələrə şüalar çəkin. İndi bu şüaları aşağıdan yuxarıya düzəcəyik və bir şüadakı nöqtələr şüanın başlanğıcından olan məsafəyə görə sıralanacaq (bu, aşağı və yuxarı istisna olmaqla bütün şüalar üçün edilir). Polyline seçilmiş (ən solda) nöqtəni aşağı şüa boyunca, sonra bütün digər şüalar boyunca (təsvir edilmiş qaydada) tərk edir və yuxarı şüa boyunca qayıdır. 12. Təyyarədə n nöqtə yoxdur. Onların qabarıq gövdəsini qurun - içərisində olan minimum konveks rəqəm. (Lövhəyə sürülmüş dırnaqların üzərinə uzanan rezin üzük onların qabarıq qabığıdır.) Gəlin nöqtələri tənzimləyək. Sonra, öz növbəsində nöqtələri nəzərə alaraq, artıq nəzərdən keçirilmiş nöqtələrin qabarıq gövdəsini quracağıq.