Скачиваний:
0
Добавлен:
20.09.2026
Размер:
269 Кб
Скачать
☆
13-lekciya. Sortlaw algoritmleri. Kóbikli sortlaw usılı. Qosıp sortlaw usılı.
Tańlap sortlaw usılı.
Joba:
1. Kirisiw: Sortlaw algoritmleri haqqında ulıwma túsinik
2. Kóbikli sortlaw usılı (Bubble Sort)
3. Tańlap sortlaw usılı (Selection Sort)
4. Qosıp (kirgizip) sortlaw usılı (Insertion Sort)
1. Kirisiw: Sortlaw algoritmleri haqqında ulıwma túsinik
Sortlaw degenimiz ne?
Sortlaw (yamasa tártiplew) – bul maǵlıwmatlar toplamınıń (mısalı, massiv
elementleriniń) elementlerin belgili bir tártip (kóbinese, ósiw yamasa kemeyiw tártibi) boyınsha qayta jaylastırıw procesi. Mısalı, [5, 1, 4, 2, 8] massivin ósiw tártibinde sortlaw nátiyjesinde [1, 2, 4, 5, 8] kórinisine keledi.
Ne ushın sortlaw zárúr?
Sortlaw programmalastırıwdıń fundamental túsiniklerinen biri bolıp, kóp máselelerdi sheshiwde zárúrli rol oynaydı:
Maǵlıwmatlardı izlewdi tezlestiriw: Tártiplengen massivte maǵlıwmattı izlew
(mısalı, Binar izlew arqalı) tártiplenbegen massivke qaraǵanda álleqayda tezirek orınlanadı.
Maǵlıwmatlardı ańsat analizlew: Tártiplengen maǵlıwmatlar menen islew
ańsatıraq. Mısalı, eń kishi yamasa eń úlken elementi tabıw, mediananı esaplaw, dublikatlardı anıqlaw hám t.b.
Basqa algoritmlerdiń tiykarı: Kóp ǵana quramalı algoritmler islewden aldın
maǵlıwmatlardı sortlawdı talap etedi.
Algoritmlerdiń natiyjeliligin bahalaw (Time Complexity)
Hár qıylı sortlaw algoritmleri bar hám olar islew waqtı hám paydalanatuǵın yad kólemi boyınsha bir-birinen parıq qıladı. Algoritmniń islew tezligi kóbinese waqıt quramalılıǵı (Time Complexity) menen bahalanadı hám "O-úlken" belgilewi (Big O Notation) arqalı kórsetiledi. Bul belgileniw maǵlıwmatlar sanı (n) artqan sayın algoritmniń islew waqtı qanshelli tez ósiwin bildiredi. Mısalı, O(n2) quramalılıqqa iye bolǵan algoritm O(n log n) ǵa qaraǵanda ádewir áste isleytuǵının ańlatadı.
Búgin biz O(n2) quramalılıqqa iye bolǵan eń ápiwayı úsh algoritmdi kórip shıǵamız.
2. Kóbikli sortlaw usılı (Bubble Sort)
Bul eń ápiwayı hám intuitiv túsinikli sortlaw algoritmlerinen biri. Onıń atı jeńil elementlerdiń (mısalı, kishi sanlardıń) massivtiń basına qaray "kóbikshe" sıyaqlı "qalqıp" shıǵıwınan alınǵan.
Islew principi
Algoritm massiv boylap bir neshe márte ótedi. Hárbir ótiwde ol jaqın turǵan eki elementti salıstıradı hám eger olar nadurıs tártipte bolsa, orınların almastıradı. Bul process massiv tolıq tártiplengenine shekem dawam etedi.
Algoritmniń basqıshları
1. Birinshi hám ekinshi elementti salıstırıń. Eger birinshisi ekinshisinen úlken bolsa,
orınların almastırıń.
2. Ekinshi hám úshinshi elementti salıstırıń hám kerek bolsa almastırıń.
3. Usı processti massivtiń aqırına shekem dawam ettiriń. Usı birinshi ótiwden keyin
eń úlken element massivtiń eń aqırǵı poziciyasına "shógip" qaladı.
4. Joqarıdaǵı 1-3 basqıshlardı massivtiń aqırǵı tártiplengen bólegin esapqa almay,
tolıq tártiplenip bolǵanǵa shekem tákirarlań.
Mısal: Massiv [5, 1, 4, 2]
1-ótiw:
o (5, 1) -> [1, 5, 4, 2] (almastırıladı) o (5, 4) -> [1, 4, 5, 2] (almastırıladı) o (5, 2) -> [1, 4, 2, 5] (almastırıladı). Eń úlken element (5) óz ornında.
2-ótiw:
o (1, 4) -> [1, 4, 2, 5] (ózgerissiz) o (4, 2) -> [1, 2, 4, 5] (almastırıladı). Kelesi úlken element (4) óz ornında.
3-ótiw:
o (1, 2) -> [1, 2, 4, 5] (ózgerissiz). Massiv sortlandı.
C++ tilindegi realizaciyası
#include <iostream> #include <utility> // std::swap ushın
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) { // Hárbir ótiwden keyin aqırǵı i-elementler óz ornında boladı for (int j = 0; j < n - i - 1; ++j) { // Jaqın turǵan elementlerdi salıstırıw
if (arr[j] > arr[j + 1]) { std::swap(arr[j], arr[j + 1]); } } } }
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) std::cout << arr[i] << " "; std::cout << std::endl; }
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); std::cout << "Sortlanǵan massiv: "; printArray(arr, n); return 0; }
Analizi
Waqıt quramalılıǵı: Eń jaman hám orta jaǵdayda - O(n
2
) . Eń jaqsı jaǵdayda
(eger massiv aldınnan sortlanǵan bolsa) - O(n) (eger optimallastırılǵan versiyası qollanılsa).
Yad quramalılıǵı: O(1), sebebi qosımsha yad talap etilmeydi. Qolaylıqları: Realizaciyası júdá ápiwayı hám túsinikli. Kemshilikleri: Kishi kólemdegi maǵlıwmatlar ushın qolaylı bolsa da, úlken
massivler ushın júdá áste isleytuǵın natiyjesiz algoritm esaplanadı.
3. Tańlap sortlaw usılı (Selection Sort)
Bul algoritm da O(n2) quramalılıqqa iye, biraq onıń islew principi basqasha. Atı aytıp turǵanınday, ol massivtiń tártiplenbegen bóleginen izbe-iz eń kishi (yamasa eń úlken) elementti "tańlap" alıp, onı tártiplengen bólektiń aqırına jaylastıradı.
Islew principi
Algoritm massivti eki bólekke ajıratadı:
1. Sortlanǵan bólek: Basında bos bolıp, massivtiń basında jaylasadı.
2. Sortlanbaǵan bólek: Basında pútkil massivti óz ishine alıp, massivtiń qalǵan
bólegin quraydı.
Algoritm sortlanbaǵan bólekten eń kishi elementti tabadı hám onı sortlanbaǵan
bólektiń birinshi elementi menen almastıradı. Usılayınsha, bul element sortlanǵan bólekke ótedi.
Algoritmniń basqıshları
1. Massivtiń sortlanbaǵan bóleginen eń kishi elementti tabıń (basında bul pútkil
massiv).
2. Tabılǵan eń kishi elementti sortlanbaǵan bólektiń eń basınǵı elementi menen
almastırıń.
3. Sortlanǵan bólektiń shegarasın bir poziciyaǵa jılıstırıń.
4. Massiv tolıq sortlanǵanǵa shekem 1-3 basqıshlardı tákirarlań.
Mısal: Massiv [64, 25, 12, 22]
1-ótiw:
o Eń kishi element - 12. o 12 ni birinshi element 64 penen almastırıń -> [12, 25, 64, 22].
2-ótiw:
o Qalǵan sortlanbaǵan bólekten [25, 64, 22] eń kishi element - 22. o 22 ni sortlanbaǵan bólektiń basındaǵı 25 penen almastırıń -> [12, 22, 64, 25].
3-ótiw:
o Qalǵan sortlanbaǵan bólekten [64, 25] eń kishi element - 25. o 25 ti 64 penen almastırıń -> [12, 22, 25, 64]. Massiv sortlandı.
C++ tilindegi realizaciyası
#include <iostream> #include <utility>
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) { // Eń kishi elementtiń indeksin tabıw int min_idx = i; for (int j = i + 1; j < n; ++j) { if (arr[j] < arr[min_idx]) { min_idx = j; } } // Eń kishi elementti házirgi poziciyaǵa almastırıw std::swap(arr[min_idx], arr[i]); } }
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) std::cout << arr[i] << " "; std::cout << std::endl; }
int main() {
int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, n); std::cout << "Sortlanǵan massiv: "; printArray(arr, n); return 0;
}
Analizi
Waqıt quramalılıǵı: Bárqulla O(n
2
) (eń jaqsı, orta hám eń jaman jaǵdayda da).
Sebebi, massiv sortlanǵan bolsa da, ol hárbir ótiwde eń kishi elementti tabıw ushın pútkil qalǵan bólekti tekserip shıǵadı.
Yad quramalılıǵı: . Qolaylıqları: Ápiwayı realizaciya. Almastırıwlar sanı Kóbikli sortlawǵa
qaraǵanda azıraq (O(n) márte), bul jazıw operaciyaları qımbat bolǵan jaǵdaylarda paydalı bolıwı múmkin.
Kemshilikleri: Kóbikli sortlaw sıyaqlı, úlken maǵlıwmatlar ushın júdá áste.
4. Qosıp (kirgizip) sortlaw usılı (Insertion Sort)
Bul algoritm kóbinese adamlardıń qolındaǵı oyınların sortlaw usılına uqsatıladı. Algoritm massivti sortlanǵan hám sortlanbaǵan eki bólekke ajıratıp isleydi. Ol sortlanbaǵan bólekten gezektegi elementti alıp, onı sortlanǵan bólektegi durıs ornına "qosıp" (kirgizip) qoyadı.
Islew principi
Massivtiń birinshi elementi sortlanǵan dep esaplanadı. Sońınan ekinshi element alınadı hám birinshisi menen salıstırılıp, durıs orınǵa jaylastırıladı. Keyin úshinshi element alınadı hám aldınǵı sortlanǵan eki element arasınan óziniń durıs ornın tabadı hám t.b.
Algoritmniń basqıshları
1. Massivtiń birinshi elementin sortlanǵan dep esaplań.
2. Ekinshi elementten baslap (i=1 den n-1 ge shekem) hárbir elementti gezek penen
key (gilt) sıpatında alıń.
3. key elementin onnan aldınǵı sortlanǵan bólektegi elementler menen salıstırıń.
4. key den úlken bolǵan elementlerdi bir poziciya ońǵa jılıstırıń, usılayınsha key
ushın bos orın ashılsın.
5. key elementin payda bolǵan bos orınǵa jaylastırıń.
6. Barlıq elementler sortlanǵanǵa shekem bul processti tákirarlań.
Mısal: Massiv [12, 11, 13, 5, 6]
Baslanǵısh: [12] sortlanǵan, [11, 13, 5, 6] sortlanbaǵan. Adım 1: key = 11. 12 > 11, sonlıqtan 12 ni ońǵa jılıstırıp, 11 di onıń ornına
qoyamız -> [11, 12, 13, 5, 6].
Adım 2: key = 13. 12 < 13, hesh nárse ózgermeydi -> [11, 12, 13, 5, 6].
Adım 3: key = 5. 13>5, 12>5, 11>5. Barlıq úsh elementti ońǵa jılıstırıp, 5 ti
basına qoyamız -> [5, 11, 12, 13, 6].
Adım 4: key = 6. 13>6, 12>6, 11>6, biraq 5<6. 13, 12, 11 di ońǵa jılıstırıp, 6 nı 5
ten keyin qoyamız -> [5, 6, 11, 12, 13]. Massiv sortlandı.
C++ tilindegi realizaciyası
#include <iostream>
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; ++i) { int key = arr[i]; int j = i - 1;
// key den úlken elementlerdi bir poziciya ońǵa jılıstırıw while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } }
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) std::cout << arr[i] << " "; std::cout << std::endl; }
int main() {
int arr[] = {12, 11, 13, 5, 6}; int n = sizeof(arr) / sizeof(arr[0]); insertionSort(arr, n); std::cout << "Sortlanǵan massiv: "; printArray(arr, n); return 0; }
Analizi
Waqıt quramalılıǵı: Eń jaman hám orta jaǵdayda - O(n
2
). Biraq, eń jaqsı
jaǵdayda (massiv derlik sortlanǵan bolsa) waqıt quramalılıǵı O(n) ǵa jaqın boladı.
Yad quramalılıǵı: O(1). Qolaylıqları: Ápiwayı realizaciya. Kishi kólemdegi massivler ushın júdá natiyjeli.
Onlayn rejimde isley aladı, yaǵnıy jańa maǵlıwmatlar kelip tursa, olardı bar sortlanǵan toplamǵa tez qosıw múmkin.
Kemshilikleri: Úlken hám tártipsiz jaylasqan maǵlıwmatlar ushın natiyjesiz.
5. Úsh algoritmdi salıstırıw hám juwmaqlaw
Kóbikli sortlaw tiykarınan oqıw hám úyreniw maqsetleri ushın qollanıladı, sebebi
onıń ápiwayı logikası sortlawdıń tiykarǵı ideyasın túsiniwge járdem beredi.
Tańlap sortlaw da oqıw ushın jaqsı, biraq onıń turaqlı O(n
2
) natiyjeliligi onı
ámeliyatta az qollanılatuǵın etedi.
Qosıp sortlaw bul úsh algoritm ishinde eń paydalısı esaplanadı. Kishi kólemdegi
maǵlıwmatlar (n < 20) ushın tez isleytuǵınlıǵı hám derlik tártiplengen massivlerde joqarı ónimdarlıǵı sebepli, ol quramalı sortlaw algoritmleriniń (mısalı, Tez sortlaw) bir bólegi retinde de qollanılıwı múmkin.
Bul úsh algoritm sortlaw dúnyasına kirisiw ushın ájayıp baslanǵısh bolıp tabıladı.
Соседние файлы в папке 1-semestr