Skip to content

Algoritmlar (Algorithms)

C++ Algoritmlar

Oldingi boblarda ma'lumot tuzilmalari (vektorlar, ro'yxatlar va boshqalar) ma'lumotlarni saqlash va tartibga solish uchun ishlatilishini o'rgandingiz.

Algoritmlar ma'lumot tuzilmalarini saralash, qidirish va boshqarish orqali muammolarni hal qilish uchun ishlatiladi.

<algorithm> kutubxonasi bu vazifalarni iteratorlar bilan bajarish uchun ko'plab foydali funksiyalarni taqdim etadi.

MISOL

cpp
// Algoritm kutubxonasini import qilish
#include <algorithm>

Saralash algoritmlari

Ma'lumot tuzilmasidagi elementlarni saralash uchun sort() funksiyasidan foydalanish mumkin.

sort() funksiyasi parametr sifatida iteratorlar (odatda begin() va end() tomonidan qaytariladigan) oladi:

MISOL

cpp
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};

// Alifbo tartibida saralash
sort(cars.begin(), cars.end());

Sukut bo'yicha, elementlar o'sish tartibida saralanadi. Butun sonlar vektori bo'lsa, raqamli tartibda saralanadi:

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

// Raqamli tartibda saralash
sort(numbers.begin(), numbers.end());

Tartibni teskari qilish uchun rbegin() va rend() ishlatiladi:

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

// Teskari raqamli tartibda saralash
sort(numbers.rbegin(), numbers.rend());

Faqat muayyan elementlarni saralash mumkin:

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

// 4-elementdan boshlab saralash (faqat 5, 9, 2 saralanadi)
sort(numbers.begin() + 3, numbers.end());

Qidirish algoritmlari

Vektorda muayyan elementni qidirish uchun find() funksiyasidan foydalanish mumkin.

U uchta parametr oladi: boshlanish_iteratori, tugash_iteratori, qiymat:

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

// 3 raqamini qidirish
auto it = find(numbers.begin(), numbers.end(), 3);

Muayyan qiymatdan katta bo'lgan birinchi elementni topish uchun upper_bound() funksiyasi ishlatiladi:

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

// Vektorni o'sish tartibida saralash
sort(numbers.begin(), numbers.end());

// 5 dan katta birinchi qiymatni topish
auto it = upper_bound(numbers.begin(), numbers.end(), 5);

ESLATMA

upper_bound() funksiyasi odatda saralangan ma'lumot tuzilmalarida ishlatiladi.

Eng kichik elementni topish uchun min_element():

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

auto it = min_element(numbers.begin(), numbers.end());

Eng katta elementni topish uchun max_element():

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

auto it = max_element(numbers.begin(), numbers.end());

O'zgartirish algoritmlari

Bir vektordan boshqasiga elementlarni nusxalash uchun copy() funksiyasi:

MISOL

cpp
vector<int> numbers = {1, 7, 3, 5, 9, 2};

// 6 ta butun son saqlaydigan copiedNumbers vektori yaratish
vector<int> copiedNumbers(6);

// numbers dan copiedNumbers ga elementlarni nusxalash
copy(numbers.begin(), numbers.end(), copiedNumbers.begin());

Vektordagi barcha elementlarni bitta qiymat bilan to'ldirish uchun fill() funksiyasi:

MISOL

cpp
vector<int> numbers(6);

// Barcha elementlarni 35 qiymati bilan to'ldirish
fill(numbers.begin(), numbers.end(), 35);