Website Summary Files Commits Branches @commit @diff @stats
path: root / Practicum / pract01 / readme.md
blob: 9fc8034dd2f154cdd261754f44cc42a1f72cecf7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Практикум №1 по СД, спец. ИС

## Функцията std::sort
`std::sort` е стандартна функция в C++, която се използва за сортиране на елементи от дадена колекция от данни. Тя е част от стандартната библиотека `<algorithm>`, която съдържа различни алгоритми за обработка на колекции от данни.

Най-често е имплементирана или чрез `Quick Sort`, или чрез алгоритъм, комбиниращ `Quick Sort`, `Heap Sort` (за който ще научите по-натам в курса) и `Insertion Sort`. 

Декларация на функцията:
```c++
#include <algorithm>

template <class RandomIt>
void sort(RandomIt first, RandomIt last);

template <class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);

```

- `Параметри`:
  - first: Итератор, указващ началото на колекцията елементи, които трябва да бъдат сортирани.
  - last: Итератор, указващ края на колекцията елементи, които трябва да бъдат сортирани (сочи елементът след последния елемент в диапазона).
  - comp (по избор): критерий за сортиране (по default се използва operator<).

- `Сложност`: std::sort има средна времева сложност O(n*log n), където n е броят на елементите, които искаме да бъдат сортирани.
- `In-Place`: std::sort не е in-place алгоритъм.
- `Stable`: std::sort не е стабилен алгоритъм.

- Пример с функция:
```c++
#include <iostream>
#include <algorithm>
#include <vector>

bool compareLastDigit(int a, int b) {
    return (a % 10) < (b % 10); 
}

int main() {
    std::vector<int> v = {25, 42, 33, 14, 56};

    std::sort(v.begin(), v.end(), compareLastDigit);

    for (const int& n : v) {
        std::cout << n << ' ';
    }
    return 0;
}

```

- Пример с **ламбда** функция:
```c++
#include <iostream>
#include <algorithm>
#include <vector>

struct PairOfInt {
    int first;
    int second;
};

int main() {
    std::vector<PairOfInt> v = { {1, 2}, {2, 1}, {5, 7}, {3, 3}, {4, 3} };

    std::sort(v.begin(), v.end(), [](const PairOfInt& lhs, const PairOfInt& rhs) { return lhs.second < rhs.second; });

    for (const auto& n : v) {
        std::cout << n.first << ' ' << n.second << std::endl;
    }
    return 0;
}

```

## Задачи и линк към методите на `std::vector`
- [**std::vector**](https://cplusplus.com/reference/vector/vector/)
- [**Линк към задачите**](https://leetcode.com/problem-list/an1ryio3/)
- [Линк към таблица с leetcode акаунти](https://docs.google.com/spreadsheets/d/1KVdic02U7f97GT2LFu67t9Z4NqyFLmCj1TjyYdrcLBE/edit?gid=0#gid=0)