Added algorithms library
This commit is contained in:
@@ -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
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#include "./heap.h"
|
||||||
|
|
||||||
|
namespace c0ding::algorithm {}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef CODING_ALGORITHMS_HEAPSORT_H
|
||||||
|
#define CODING_ALGORITHMS_HEAPSORT_H
|
||||||
|
|
||||||
|
namespace c0ding::algorithm {
|
||||||
|
class heap {};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //CODING_ALGORITHMS_HEAPSORT_H
|
||||||
@@ -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>();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#include "./radix.h"
|
||||||
|
|
||||||
|
namespace c0ding::algorithm {}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef CODING_ALGORITHMS_RADIXSORT_H
|
||||||
|
#define CODING_ALGORITHMS_RADIXSORT_H
|
||||||
|
|
||||||
|
namespace c0ding::algorithm {
|
||||||
|
class radix {};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //CODING_ALGORITHMS_RADIXSORT_H
|
||||||
Reference in New Issue
Block a user