Added algorithms library

This commit is contained in:
2019-11-28 21:42:07 +01:00
parent dff20e8bac
commit ad9960635b
9 changed files with 138 additions and 0 deletions
+7
View File
@@ -21,9 +21,16 @@
- `to_lower` - transform all characters in the string to lowercase - `to_lower` - transform all characters in the string to lowercase
- `to_upper` - transform all characters in the string to uppercase - `to_upper` - transform all characters in the string to uppercase
- `c0ding::algorithm` library
- `c0ding::algorithm::sort` algorithms (only partially done)
- `c0ding::algorithm::quick` sort algorithm
### Currently planned features ### Currently planned features
- `c0ding::networking` library (based on `boost::asio`) - `c0ding::networking` library (based on `boost::asio`)
- `c0ding::algorithm` library - `c0ding::algorithm` library
- `c0ding::algorithm::sort` algorithms - `c0ding::algorithm::sort` algorithms
- `c0ding::algorithm::heap` sort algorithm
- `c0ding::algorithm::merge` sort algorithm
- `c0ding::algorithm::radix` sort algorithm
- `c0ding::algorithm::search` algorithms - `c0ding::algorithm::search` algorithms
+3
View File
@@ -0,0 +1,3 @@
#include "./heap.h"
namespace c0ding::algorithm {}
+8
View File
@@ -0,0 +1,8 @@
#ifndef CODING_ALGORITHMS_HEAPSORT_H
#define CODING_ALGORITHMS_HEAPSORT_H
namespace c0ding::algorithm {
class heap {};
}
#endif //CODING_ALGORITHMS_HEAPSORT_H
+25
View File
@@ -0,0 +1,25 @@
#include "./merge.h"
namespace c0ding::algorithm {
template<class T>
void merge::sort(std::vector<T>& list) {
if (list.size() > 1) {
}
}
template<class T>
void merge::sort_natural(std::vector<T>& list) {
if (list.size() > 1) {
}
}
template<class T>
void merge::_merge(std::vector<T>& left, std::vector<T>& right) {
}
template<class T>
std::vector<T> merge::_bitonic(std::vector<T>& list) {
return std::vector<T>();
}
}
+25
View File
@@ -0,0 +1,25 @@
#ifndef CODING_ALGORITHMS_MERGESORT_H
#define CODING_ALGORITHMS_MERGESORT_H
#include <iterator>
#include <vector>
namespace c0ding::algorithm {
class merge {
public:
template<class T>
static void sort(std::vector<T>& list);
template<class T>
static void sort_natural(std::vector<T>& list);
private:
template<class T>
static void _merge(std::vector<T>& left, std::vector<T>& right);
template<class T>
static std::vector<T> _bitonic(std::vector<T>& list);
};
}
#endif //CODING_ALGORITHMS_MERGESORT_H
+40
View File
@@ -0,0 +1,40 @@
#include "./quick.h"
namespace c0ding::algorithm {
template<class T>
void quick::sort(std::vector<T>& list) {
if (list.size() > 1) {
_quick<T>(list.begin(), --list.end());
}
}
template<class T>
void quick::_quick(const typename std::vector<T>::iterator& left, const typename std::vector<T>::iterator& right) {
typename std::vector<T>::iterator i = left, mid = left;
typename std::vector<T>::iterator j = right;
std::advance(mid, std::distance(left, right) / 2);
const long pivot = *mid;
while (std::distance(i, j) >= 0) {
while (*i < pivot) {
i++;
}
while (*j > pivot) {
j--;
}
if (std::distance(i, j) >= 0) {
std::iter_swap(i, j);
i++;
j--;
}
}
if (std::distance(left, j) > 0) {
_quick<T>(left, j);
}
if (std::distance(i, right) > 0) {
_quick<T>(i, right);
}
}
}
+19
View File
@@ -0,0 +1,19 @@
#ifndef CODING_ALGORITHMS_QUICKSORT_H
#define CODING_ALGORITHMS_QUICKSORT_H
#include <vector>
#include <iterator>
namespace c0ding::algorithm {
class quick {
public:
template<class T>
static void sort(std::vector<T>& list);
private:
template<class T>
static void _quick(const typename std::vector<T>::iterator& left, const typename std::vector<T>::iterator& right);
};
}
#endif //CODING_ALGORITHMS_QUICKSORT_H
+3
View File
@@ -0,0 +1,3 @@
#include "./radix.h"
namespace c0ding::algorithm {}
+8
View File
@@ -0,0 +1,8 @@
#ifndef CODING_ALGORITHMS_RADIXSORT_H
#define CODING_ALGORITHMS_RADIXSORT_H
namespace c0ding::algorithm {
class radix {};
}
#endif //CODING_ALGORITHMS_RADIXSORT_H