Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 11 / array_algorithms.cpp
diff options
context:
space:
mode:
1 files changed, 0 insertions, 134 deletions
-rw-r--r--Sem. 11/array_algorithms.cpp134
diff --git a/Sem. 11/array_algorithms.cpp b/Sem. 11/array_algorithms.cpp
deleted file mode 100644
index ed8d664..0000000
--- a/Sem. 11/array_algorithms.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-#include <iostream>
-using namespace std;
-// Алгоритми върху масиви.
-// Пример за алгормитъм.
-// Функция, която търси елемент в масив.
-// Search arr, el ->
-// -1 ako go nqma, + ako go ima -> indeksa
-
-
-int linearSearch(const int* arr, int len, int searched)
-{
- for (int i = 0; i < len; i++)
- {
- if (arr[i] == searched)
- return i;//връщаме индекса.
- }
- return -1;//елементът го няма
-}
-// Анализ - кога тези алгоритми са "бързи" и кога са "бавни".
-// Сложност на алгоритъм - колко стъпки ще направи алгоритъма.
-// Приемаме, че масивът е с n елемента.
-// best-case: 1 стъпка O(1)
-// average-case: n/2 стъпки. O(n)
-// worst-case: n стъпки. O(n)
-
-// зад 2) Търсене в масив. Масивът е сортиран.
-
-// Двоично търсене (binary search).
-//
-int binarySearch(const int* arr, int len, int searched)
-{
- int leftIndex = 0;
- int rightIndex = len - 1;
- while (leftIndex <= rightIndex)
- {
- int midIndex = (leftIndex + rightIndex) / 2;
- if (arr[midIndex] == searched)
- return midIndex;
- if (arr[midIndex] > searched)
- rightIndex = midIndex - 1;
- else
- leftIndex = midIndex + 1;
- }
- return -1;
-
-}
-// best-case: 1 стъпка O(1)
-// average-case: O(log(n))
-// worst-case: O(log(n))
-// Сортиран масив с 70000 елемента -> линейно търсене (70000 стъпки)
-// -> двоично търсене (16 стъпки)
-
-
-
-
-//Сортиране на масив.
-// Пример: 9 6 3 7 -> 3 6 7 9
-
-// Bubble sort (Сортиране по метода на мехурчето)
-
-// "Разходка по масива"
-//
-void swap(int* arr, int i, int j)
-{
- int temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
-}
-
-//След една разходка най-големият елемент ще отиде на мястото си.
-// след разходка 2-> 2-та най-големи елемента ще са на мясотот си
-// след разходка 3-> 3-те ...
-//Ако след една разходка, не направим нито един swap, то следва че масивът вече е сортиран.
-void bubbleSort(int* arr, int len)
-{
- for (int j = 0; j < len - 1; j++)
- {
- bool isSwapped = false;
- for (int i = 0; i < len - 1 - j; i++)
- {
- if (arr[i] > arr[i + 1])
- {
- swap(arr, i, i + 1);
- isSwapped = true;
- }
- }
- if (!isSwapped)
- return;
- }
-}
-
-//Сложност:
-// best-case: O(n)
-// average-case: O(n^2)
-// worst-case: n*(n-1) /2 = (n^2 + n )/2 O(n^2)
-
-// Стабилност: (следващият път)
-
-
-
-// Selection sort (сортиране чрез пряка селекция).
-// 5 8 1 4 9
-
-void selectionSort(int* arr, int len)
-{
- for (int pos = 0; pos < len - 1; pos++)
- {
- int minIndex = pos;
- for (int i = pos; i < len; i++)
- {
- if (arr[i] < arr[minIndex])
- minIndex = i;
- }
- if (pos != minIndex)
- swap(arr, pos, minIndex);
- }
-}
-
-// Сложност:
-// best-case: O(n^2)
-// average-case: O(n^2)
-// worst-case: О(n^2)
-
-// Selection sort прави минимален брой swap-ове.
-
-
-int main()
-{
- int arr[] = {5,3,2,6,1,4};
- selectionSort(arr, 6);
- for (int i = 0; i < 6; i++)
- cout << arr[i] << " ";
- //cout << binarySearch(arr, 10, 500);
-}