Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:1-semestr / 13-LEKCIYA_2
.pdf
13-TEMA: SORTLAW ALGORITMLERI. KÓBIKLI SORTLAW USÍLÍ. QOSÍP
#include <iostream>
using namespace std;
// Kóbikli sortlaw funkciyası
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
SORTLAW USÍLÍ. TAŃLAP SORTLAW USÍLÍ.
Jobası:
1. Sortlaw algoritmleri haqqında
2. Kóbikli sortlaw usılı
3. Qosıp sortlaw usılı
4. Tańlap sortlaw usılı
Sortlaw algoritmleri
Sortlaw - bul maǵlıwmatlardı belgili bir tártipte (mısalı, ósiw yaki kemeyiw tártibinde)
jaylastırıw procesi. Sortlaw algoritmleri programmalastırıwda júdá áhmiyetli orın iyeleydi,
sebebi olar maǵlıwmatlardı shólkemlestiriw hám izlewdi tezletiw ushın qollanıladı.
Biz úsh tiykarǵı sortlaw usılın kórip shıǵamız:
1. Kóbikli sortlaw usılı (Bubble Sort);
2. Qosıp sortlaw usılı (Insertion Sort);
3. Tańlap sortlaw usılı (Selection Sort);
1. Kóbikli sortlaw usılı (Bubble Sort)
Kóbikli sortlaw - bul eń ápiwayı sortlaw algoritmleriniń biri. Bul usıl qońsılas elementlerdi
salıstırıp, kerek bolsa orınların almastırıw arqalı isleydi.
Algoritmniń islew tártibi:
1. Massivtiń birinshi elementinen baslap, hár bir elementti ózinen keyingi element penen
salıstıramız.
2. Eger aǵımdaǵı element keyingisinen úlken bolsa, olardı almastıramız.
3. Bul processti massivtiń aqırına shekem dawam ettiremiz.
4. Joqarıdaǵı adımlardı massiv tolıq sortlanǵansha qaytalaymız.
C++ tilinde kóbikli sortlaw usılınıń implementaciyası:

if (arr[j] > arr[j+1]) {
// Elementlerdi almastırıw
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
// Massivti basıp shıǵarıw funkciyası
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
cout << arr[i] << " ";
cout << endl;
}
// Tiykarǵı funkciya
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Dáslepki massiv: ";
printArray(arr, n);
bubbleSort(arr, n);
cout << "Sortlanǵan massiv: ";
printArray(arr, n);
return 0;
}
1. Biz zárúr bolǵan kitapxanalardı qosamız hám `using namespace std;` arqalı standart atlar
keńisligin paydalanamız.
2. `bubbleSort` funkciyası:
- Bul funkciya eki parametr aladı: massiv (`arr`) hám onıń ólshemi (`n`).
- Sırtqı cikl (`i`) massivti `n-1` ret aylanadı, sebebi hár aylanısta eń úlken element oń tárepke
jıljıydı.

- Ishki cikl (`j`) hár aylanısta qońsılas elementlerdi salıstıradı.
- Eger shep jaqtaǵı element oń jaqtaǵıdan úlken bolsa, olar orın almasadı.
3. `printArray` funkciyası:
- Bul funkciya massivti ekranǵa shıǵarıw ushın qollanıladı.
- Ol massivtiń hár bir elementin bir qatarǵa jaylastırıp basıp shıǵaradı.
4. `main` funkciyası:
- Biz sortlanıwı kerek bolǵan massivti anıqlaymız.
- Massivtiń ólshemin esaplaymız.
- Dáslepki massivti basıp shıǵaramız.
- `bubbleSort` funkciyasın shaqırıp, massivti sortlaymız.
- Sortlanǵan massivti basıp shıǵaramız.
Bul programma orınlanǵanda, ol dáslepki massivti kórsetedi, onı kóbikli sortlaw usılı menen
sortlaydı, sońınan sortlanǵan massivti kórsetedi.
Kiris: 5 (oqıwshı sanı)
Shıǵıs:
Aliya 85
Baxıt 92
Gúlnara 78
Dáwlet 92
Erlan 85
Baxıt 92
Dáwlet 92
Aliya 85
Erlan 85
Gúlnara 78
C++ te orınlanıwı
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Student {
string name;
int score;
};
void bubbleSort(vector<Student>& students) {
int n = students.size();
for (int i = 0; i < n - 1; i++) {
Mısallar:
1-másele:
Sizge n oqıwshınıń balları berilgen. Hár bir oqıwshınıń atı hám onıń alǵan ballı bar.
Oqıwshılardı olardıń balları boyınsha kemeyiw tártibinde sortlań. Eger eki oqıwshınıń balları
birdey bolsa, olardı atları boyınsha álipbe tártibinde jaylastırıń.

for (int j = 0; j < n - i - 1; j++) {
if (students[j].score < students[j + 1].score ||
(students[j].score == students[j + 1].score &&
students[j].name > students[j + 1].name)) {
swap(students[j], students[j + 1]);
}
}
}
}
int main() {
vector<Student> students = {
{"Alice", 85},
{"Bob", 92},
{"Charlie", 88},
{"David", 76},
{"Eve", 92}
};
bubbleSort(students);
for (const auto& student : students) {
cout << student.name << " " << student.score << endl;
}
return 0;
}
1. `Student` strukturasın anıqlaymız, onda oqıwshınıń atı hám ballı saqlanadı.
2. `bubbleSort` funkciyasın jazamız. Bul funkciya kóbikli sortlaw algoritmin qollanadı:
- Sırtqı cikl massiv boylap n-1 ret ótedi.
- Ishki cikl hár ótiwde eki qońsılas elementti salıstıradı.
- Eger ballar kemeyiw tártibinde bolmasa, yamasa ballar birdey bolıp atlar álipbe tártibinde
bolmasa, elementlerdi almastıramız.
3. `main` funkciyasında:
- Oqıwshılar haqqında maǵlıwmatlardı tikkeley vektorǵa kirgizemiz.
- `bubbleSort` funkciyasın shaqırıp, vektordı sortlaymız.
- Sortlanǵan nátiyjeni ekranǵa shıǵaramız.
Bul kod berilgen maǵlıwmatlardı qollanıp, kóbikli sortlaw algoritmi arqalı oqıwshılardı balları
boyınsha kemeyiw tártibinde, al birdey ball jaǵdayında atların álipbe tártibinde sortlaydı.
2-másele:
Sizge n sanlı elementten turatuǵın massiv berilgen. Kóbikli sortlaw algoritmin qollanıp, bul
massivti ósiw tártibinde sortlań. Biraq, sortlaw barısında tek jup indekstegi elementlerdi ǵana
salıstırıń hám almastırıń. Jup emes indekstegi elementler óz ornında qalıwı kerek.
Kiris: [5, 3, 8, 4, 2, 7, 1, 9, 6]
Shıǵıs: [2, 3, 5, 4, 8, 7, 1, 9, 6]

Túsindirme: Tek 0, 2, 4, 6, 8 indekslerindegi elementler salıstırılıp, kerek bolsa almastırıladı. 1,
C++ te orınlanıwı:
#include <iostream>
#include <vector>
using namespace std;
void bubbleSortEvenIndices(vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j += 2) {
if (arr[j] > arr[j + 2]) {
swap(arr[j], arr[j + 2]);
}
}
}
}
int main() {
vector<int> arr = {5, 3, 8, 4, 2, 7, 1, 9, 6};
cout << "Kiris: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
bubbleSortEvenIndices(arr);
cout << "Shıǵıs: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
return 0;
}
Bul kodtıń islew tártibi:
1. `bubbleSortEvenIndices` funkciyasın anıqlaymız:
- Sırtqı cikl massiv boylap n-1 ret ótedi.
- Ishki cikl tek jup indekslerdi qaraydı (j += 2).
- Hár ótiwde eki jup indeksli elementti salıstıradı (arr[j] hám arr[j + 2]).
- Eger arr[j] > arr[j + 2] bolsa, olardı almastıradı.
2. `main` funkciyasında:
- Berilgen massivti vektorǵa kirgizemiz: {5, 3, 8, 4, 2, 7, 1, 9, 6}
- Dáslepki massivti ekranǵa shıǵaramız.
- `bubbleSortEvenIndices` funkciyasın shaqırıp, massivti sortlaymız.
- Sortlanǵan nátiyjeni ekranǵa shıǵaramız.
3, 5, 7 indekslerindegi elementler ózgermeydi.

Bul algoritm tek jup indeksli elementlerdi (0, 2, 4, 6, 8) salıstırıp hám kerek bolǵanda
almastıradı. Taq indeksli elementler (1, 3, 5, 7) ózgermeydi.
Nátiyjede, massiv bılay ózgeredi:
- Kiris: [5, 3, 8, 4, 2, 7, 1, 9, 6]
- Shıǵıs: [2, 3, 5, 4, 8, 7, 1, 9, 6]
Bul jerde 5 hám 2, 8 hám 5 almasqanın kóriwge boladı, al taq indeksli elementler (3, 4, 7, 9) óz
ornında qalǵan.
Kóbikli sortlawdıń artıqmashlıqları:
- Implementaciya qılıw ańsat
- Az orın talap etedi (in-place algoritm)
Kemshilikleri:
- Úlken massivler ushın júdá áste isleydi
- Waqıt quramalılıǵı O(n^2), bul júdá joqarı
2. Qosıp sortlaw usılı (Insertion Sort)
Qosıp sortlaw usılı massivti eki bólimge bóledi: sortlanǵan hám sortlanbaǵan. Ol sortlanbaǵan
bólimnen elementlerdi alıp, olardı sortlanǵan bólimge durıs orınǵa jaylastıradı.
Algoritmniń islew tártibi:
1. Massivtiń birinshi elementin sortlanǵan dep esaplaymız.
2. Ekinshi elementten baslap, hár bir elementti alamız.
3. Bul elementti sortlanǵan bólimdegi elementler menen salıstıramız.
4. Durıs orındı tawıp, elementti sol orınǵa qoyamız.
5. Bul processti massivtiń aqırına shekem qaytalaymız.
C++ tilinde qosıp sortlaw usılınıń implementaciyası:
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;

}
C++
#include <iostream>
#include <vector>
using namespace std;
void insertionSort(vector<int>& arr) {
int n = arr.size();
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
int main() {
vector<int> arr = {5, 2, 8, 12, 1, 6};
cout << "Dáslepki massiv: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
insertionSort(arr);
cout << "Sortlanǵan massiv: ";
for (int num : arr) {
cout << num << " ";
}
cout << endl;
return 0;
}
1. Bizde `insertionSort` funkciyası bar, ol vektordı parametr retinde aladı.
arr[j + 1] = key;
}
}
1-másele:
Sizge n sanlı pútin sanlardan turatuǵın massiv berilgen. Qosıp sortlaw usılın qollanıp, bul
massivti ósiw tártibinde sortlań.
Kiris: [5, 2, 8, 12, 1, 6]
Shıǵıs: [1, 2, 5, 6, 8, 12]
Túsindirme: Massivti shep jaqtan oń jaqqa qaray qarap shıǵıp, hár elementti ózinen aldınǵı
elementler menen salıstırıp, kerekli orınǵa jaylastırıw kerek.

2. Funkciya ishinde, biz massivtiń ekinshi elementinen (indeks 1) baslap cikldi baslanamız.
3. Hár iteraciyada, biz aǵımdaǵı elementti `key` ózgeriwshisine saqlaymız.
4. Keyin biz `j` ózgeriwshisin `i-1` ge teńleymiz, yaǵnıy `key` diń aldındaǵı elementtiń
indeksine.
5. Ishki cikl arqalı biz `key` di onnan úlken bolǵan barlıq elementler menen salıstıramız hám
olardı oń jaqqa jıljıtamız.
6. Ishki cikl toqtaǵannan keyin, biz `key` di onıń durıs poziciyasına (yaǵnıy `j+1` indeksine)
jaylastıramız.
7. Bul process massivtiń aqırına shekem dawam etedi.
8. `main` funkciyasında biz dáslepki massivti jariyalanamız, onı ekranǵa shıǵaramız, keyin
`insertionSort` funkciyasın shaqıramız hám aqırında sortlanǵan massivti ekranǵa shıǵaramız.
Bul algoritm massivti shep jaqtan oń jaqqa qaray qarap shıǵıp, hár elementti ózinen aldınǵı
elementler menen salıstırıp, kerekli orınǵa jaylastıradı. Nátiyjede, massiv ósiw tártibinde
sortlanadı.
Kiris:
Shıǵıs:
Aliya 15
Baxıt 17
Gúlnara 15
Dáwlet 16
Erlan 17
Baxıt 17
Erlan 17
Dáwlet 16
Aliya 15
Gúlnara 15
C++
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct Student {
string name;
int age;
};
bool compareStudents(const Student& a, const Student& b) {
2-másele:
Sizge n sanlı oqıwshınıń atı hám jası berilgen. Qosıp sortlaw usılın qollanıp, oqıwshılardı jası
boyınsha kemiw tártibinde sortlań. Eger jasları birdey bolsa, atları boyınsha álipbe tártibinde
sortlań.
Túsindirme: Oqıwshılardı dáslep jası boyınsha kemiw tártibinde, jasları birdey bolǵan jaǵdayda
atları boyınsha álipbe tártibinde sortlaw kerek.

if (a.age != b.age) {
return a.age > b.age; // kemiw
}
return a.name < b.name; // ()
}
void insertionSort(vector<Student>& students) {
int n = students.size();
for (int i = 1; i < n; i++) {
Student key = students[i];
int j = i - 1;
while (j >= 0 && compareStudents(key, students[j])) {
students[j + 1] = students[j];
j--;
}
students[j + 1] = key;
}
}
int main() {
vector<Student> students = {
{"Aliya", 15},
{"", 17},
{"", 15},
{"", 16},
{"Erlan", 17}
};
cout << " dizim:" << endl;
for (const auto& student : students) {
cout << student.name << " " << student.age << endl;
}
insertionSort(students);
cout << "\n dizim:" << endl;
for (const auto& student : students) {
cout << student.name << " " << student.age << endl;
}
return 0;
}
1. Biz `Student` strukturasın jasadıq, onda oqıwshınıń atı hám jası saqlanadı.
2. `compareStudents` funkciyası eki oqıwshını salıstıradı. Eger jasları hár qıylı bolsa, úlken
jastaǵı oqıwshı aldıǵa qoyıladı. Eger jasları birdey bolsa, atları álipbe tártibinde salıstırıladı.
3. `insertionSort` funkciyası aldıńǵı mısalǵa uqsas, biraq endi ol `Student` obektlerin sortlaydı
hám `compareStudents` funkciyasın qollanadı.
4. `main` funkciyasında:
- Oqıwshılar dizimin jasaymız.
- Dáslepki dizimdi ekranǵa shıǵaramız.
- `insertionSort` funkciyasın shaqırıp, dizimdi sortlaymız.

- Sortlanǵan dizimdi ekranǵa shıǵaramız.
5. Insertion Sort algoritmi:
- Dizimniń ekinshi elementinen (indeks 1) baslap cikldi baslanamız.
- Hár iteraciyada, aǵımdaǵı oqıwshını `key` ózgeriwshisine saqlaymız.
- Onnan aldınǵı oqıwshılar menen salıstırıp, kerekli orınǵa jaylastıramız.
- Bul process hár bir element ushın qaytalanadı, nátiyjede dizim tolıq sortlanadı.
- Salıstırıw `compareStudents` funkciyası arqalı ámelge asırıladı, bul funkciya jas hám at
boyınsha sáykes tártipte sortlawdı támiyinleydi.
6. Nátiyje:
- Sortlawdan keyin, dizim jas boyınsha kemiw tártibinde boladı.
- Birdey jastaǵı oqıwshılar óz ara atları boyınsha álipbe tártibinde jaylasadı.
7. Kodtıń orınlanıwı:
- Programma dáslep kirgizilgen dizimdi kórsetedi.
- Sońınan sortlanǵan dizimdi kórsetedi.
8. Nátiyjeniń durıslıǵın tekseriw:
- Baxıt (17) hám Erlan (17) dizimniń basında turadı, sebebi olardıń jası eń úlken.
- Baxıt Erlannan aldın turadı, sebebi olardıń jası birdey, biraq Baxıttıń atı álipbe boyınsha aldın
keledi.
- Dáwlet (16) olardan keyin turadı.
- Aliya (15) hám Gúlnara (15) dizimniń aqırında turadı, sebebi olardıń jası eń kishi.
- Aliya Gúlnaradan aldın turadı, sebebi olardıń jası birdey, biraq Aliyanıń atı álipbe boyınsha
aldın keledi.
Qosıp sortlaw usılınıń artıqmashlıqları:
- Kishi massivler ushın júdá nátiyjeli
- Turaqlı (stable) sortlaw usılı
- In-place algoritm, qosımsha orın talap etpeydi
Kemshilikleri:
- Úlken massivler ushın nátiyjeliligi tómen
- Waqıt quramalılıǵı O(n^2)
Tańlap sortlaw usılı massivti eki bólimge bóledi: sortlanǵan hám sortlanbaǵan. Hár iteraciyada
sortlanbaǵan bólimnen eń kishi elementti tabıp, onı sortlanǵan bólimniń aqırına qosadı.
3. Tańlap sortlaw usılı (Selection Sort)
Соседние файлы в папке 1-semestr
