Added algorithms library
This commit is contained in:
@@ -21,9 +21,16 @@
|
||||
- `to_lower` - transform all characters in the string to lowercase
|
||||
- `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
|
||||
|
||||
- `c0ding::networking` library (based on `boost::asio`)
|
||||
- `c0ding::algorithm` library
|
||||
- `c0ding::algorithm::sort` algorithms
|
||||
- `c0ding::algorithm::heap` sort algorithm
|
||||
- `c0ding::algorithm::merge` sort algorithm
|
||||
- `c0ding::algorithm::radix` sort algorithm
|
||||
- `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