Skip to content

Commit d1fc3f8

Browse files
committed
Algo Search and Sort
1 parent e36f317 commit d1fc3f8

10 files changed

+415
-1
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.vscode/
22
*.exe
3-
.cph/
3+
.cph/
4+
*.bin
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include <bits/stdc++.h>
2+
3+
using ll = long long int;
4+
5+
ll kadane(std::vector<ll> &data)
6+
{
7+
ll res = data[0], maxsum = data[0];
8+
for (ll i = 1; i < data.size(); ++i)
9+
{
10+
maxsum = std::max(data[i], maxsum + data[i]);
11+
res = std::max(res, maxsum);
12+
}
13+
return res;
14+
}
15+
16+
int main()
17+
{
18+
int t;
19+
std::cin >> t;
20+
while (t--)
21+
{
22+
ll size, element;
23+
std::cin >> size;
24+
std::vector<ll> data;
25+
data.reserve(size);
26+
for (ll i = 0; i < size; i++)
27+
{
28+
std::cin >> element;
29+
data.emplace_back(element);
30+
}
31+
std::cout << kadane(data) << std::endl;
32+
data.clear();
33+
}
34+
return 0;
35+
}

ALGORITHMS/Arrays/WindowSliding.cpp

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
//TODO:
2+
//* Given an unsorted array of non-negative integers.Find if there is a subarray wiht given sum*/
3+
4+
#include <bits/stdc++.h>
5+
6+
using ll = long long int;
7+
8+
bool windowSliding(std::vector<ll> &data, ll target)
9+
{
10+
ll curr_sum = data[0], start = 0;
11+
for (ll i = 1; i < data.size(); ++i)
12+
{
13+
while (curr_sum > target && start < i - 1)
14+
{
15+
curr_sum = curr_sum - data[start];
16+
start++;
17+
}
18+
if (curr_sum == target)
19+
{
20+
return true;
21+
}
22+
else
23+
{
24+
curr_sum += data[i];
25+
}
26+
}
27+
return curr_sum == target;
28+
}
29+
30+
int main()
31+
{
32+
int t;
33+
std::cin >> t;
34+
while (t--)
35+
{
36+
ll size, element, target;
37+
std::cin >> size >> target;
38+
std::vector<ll> data;
39+
data.reserve(size);
40+
for (ll i = 0; i < size; i++)
41+
{
42+
std::cin >> element;
43+
data.emplace_back(element);
44+
}
45+
std::cout << windowSliding(data, target) << std::endl;
46+
data.clear();
47+
}
48+
return 0;
49+
}
-82.6 KB
Binary file not shown.

ALGORITHMS/Sorting/HeapSort.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include <bits/stdc++.h>
2+
3+
using ll = long long int;
4+
5+
void heapSort(std::vector<ll> &data, ll low, ll high)
6+
{
7+
}
8+
9+
void printArray(std::vector<ll> data)
10+
{
11+
for (int i = 0; i < data.size(); ++i)
12+
{
13+
std::cout << data[i] << " ";
14+
}
15+
std::cout << "\n";
16+
}
17+
18+
int main()
19+
{
20+
int t;
21+
std::cin >> t;
22+
while (t--)
23+
{
24+
ll size, element;
25+
std::cin >> size;
26+
std::vector<ll> data;
27+
data.reserve(size);
28+
for (ll i = 0; i < size; i++)
29+
{
30+
std::cin >> element;
31+
data.emplace_back(element);
32+
}
33+
heapSort(data, 0, data.size() - 1);
34+
printArray(data);
35+
}
36+
return 0;
37+
}

ALGORITHMS/Sorting/MergeSort.cpp

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#include <bits/stdc++.h>
2+
3+
using ll = long long int;
4+
5+
void merge(std::vector<ll> &data, ll low, ll mid, ll high)
6+
{
7+
ll leftSize = mid - low + 1, rightSize = high - mid;
8+
std::vector<ll> left(leftSize);
9+
std::vector<ll> right(rightSize);
10+
11+
for (ll i = 0; i < leftSize; i++)
12+
{
13+
left[i] = data[i + low];
14+
}
15+
for (ll j = 0; j < rightSize; j++)
16+
{
17+
right[j] = data[mid + j + 1];
18+
}
19+
20+
ll i = 0, j = 0, k = low;
21+
while (i < leftSize && j < rightSize)
22+
{
23+
if (left[i] <= right[j])
24+
{
25+
data[k++] = left[i++];
26+
}
27+
else
28+
{
29+
data[k++] = right[j++];
30+
}
31+
}
32+
while (i < leftSize)
33+
{
34+
data[k++] = left[i++];
35+
}
36+
while (j < rightSize)
37+
{
38+
data[k++] = right[j++];
39+
}
40+
}
41+
42+
void mergeSort(std::vector<ll> &data, ll low, ll high)
43+
{
44+
if (high > low)
45+
{
46+
ll mid = low + (high - low) / 2; //used to avoid overflow
47+
mergeSort(data, low, mid);
48+
mergeSort(data, mid + 1, high);
49+
merge(data, low, mid, high);
50+
}
51+
}
52+
53+
void printArray(std::vector<ll> arr)
54+
{
55+
for (int i = 0; i < arr.size(); ++i)
56+
{
57+
std::cout << arr[i] << " ";
58+
}
59+
std::cout << "\n";
60+
}
61+
62+
int main()
63+
{
64+
int t;
65+
std::cin >> t;
66+
while (t--)
67+
{
68+
ll size, element;
69+
std::cin >> size;
70+
std::vector<ll> data;
71+
data.reserve(size);
72+
for (ll i = 0; i < size; i++)
73+
{
74+
std::cin >> element;
75+
data.emplace_back(element);
76+
}
77+
mergeSort(data, 0, data.size() - 1);
78+
printArray(data);
79+
}
80+
return 0;
81+
}
+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include <bits/stdc++.h>
2+
3+
using ll = long long int;
4+
5+
ll partition(std::vector<ll> &data, ll low, ll high)
6+
{
7+
ll pivot = data[low];
8+
ll i = low - 1, j = high + 1;
9+
while (true)
10+
{
11+
do
12+
{
13+
i++;
14+
} while (data[i] < pivot);
15+
do
16+
{
17+
j--;
18+
} while (data[j] > pivot);
19+
if (i >= j)
20+
{
21+
return j;
22+
}
23+
std::swap(data[i], data[j]);
24+
}
25+
}
26+
27+
void quickSort(std::vector<ll> &data, ll low, ll high)
28+
{
29+
if (high > low)
30+
{
31+
ll p = partition(data, low, high);
32+
quickSort(data, low, p);
33+
quickSort(data, p + 1, high);
34+
}
35+
}
36+
37+
void printArray(std::vector<ll> data)
38+
{
39+
for (int i = 0; i < data.size(); ++i)
40+
{
41+
std::cout << data[i] << " ";
42+
}
43+
std::cout << "\n";
44+
}
45+
46+
int main()
47+
{
48+
int t;
49+
std::cin >> t;
50+
while (t--)
51+
{
52+
ll size, element;
53+
std::cin >> size;
54+
std::vector<ll> data;
55+
data.reserve(size);
56+
for (ll i = 0; i < size; i++)
57+
{
58+
std::cin >> element;
59+
data.emplace_back(element);
60+
}
61+
quickSort(data, 0, data.size() - 1);
62+
printArray(data);
63+
}
64+
return 0;
65+
}
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <bits/stdc++.h>
2+
3+
using ll = long long int;
4+
5+
ll partition(std::vector<ll> &data, ll low, ll high)
6+
{
7+
ll pivot = data[high];
8+
ll i = low - 1;
9+
for (ll j = low; j <= high - 1; ++j)
10+
{
11+
if (data[j] < pivot)
12+
{
13+
i++;
14+
std::swap(data[j], data[i]);
15+
}
16+
}
17+
std::swap(data[i + 1], data[high]);
18+
return (i + 1);
19+
}
20+
21+
void quickSort(std::vector<ll> &data, ll low, ll high)
22+
{
23+
if (high > low)
24+
{
25+
ll p = partition(data, low, high);
26+
quickSort(data, low, p - 1);
27+
quickSort(data, p + 1, high);
28+
}
29+
}
30+
31+
void printArray(std::vector<ll> data)
32+
{
33+
for (int i = 0; i < data.size(); ++i)
34+
{
35+
std::cout << data[i] << " ";
36+
}
37+
std::cout << "\n";
38+
}
39+
40+
int main()
41+
{
42+
int t;
43+
std::cin >> t;
44+
while (t--)
45+
{
46+
ll size, element;
47+
std::cin >> size;
48+
std::vector<ll> data;
49+
data.reserve(size);
50+
for (ll i = 0; i < size; i++)
51+
{
52+
std::cin >> element;
53+
data.emplace_back(element);
54+
}
55+
quickSort(data, 0, data.size() - 1);
56+
printArray(data);
57+
}
58+
return 0;
59+
}

0 commit comments

Comments
 (0)