PmergeMe.hpp
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* PmergeMe.hpp :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/12/31 17:08:24 by gychoi #+# #+# */ 9 /* Updated: 2024/01/16 21:09:03 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #ifndef __PMERGEME_HPP__ 14 #define __PMERGEME_HPP__ 15 16 #include <algorithm> 17 #include <cstdlib> 18 #include <cstring> 19 #include <deque> 20 #include <limits> 21 #include <stdexcept> 22 #include <string> 23 #include <vector> 24 25 struct ValuePair 26 { 27 int value; 28 int index; 29 }; 30 31 class PmergeMe 32 { 33 private: 34 PmergeMe(); 35 PmergeMe(PmergeMe const& other); 36 PmergeMe& operator=(PmergeMe const& other); 37 ~PmergeMe(); 38 39 public: 40 static std::vector<int> const& getSequence(); 41 static void setSequence(char** seq, int len); 42 43 public: 44 static void fordJohnsonSort(std::vector<int>& v, int size, int turn = 1); 45 static void fordJohnsonSort(std::deque<int>& d, int size, int turn = 1); 46 47 private: 48 static std::vector<int> sSequence; 49 static std::deque<int> sPartialJacobsthalSequence; 50 }; 51 52 template <typename T> 53 bool isAllSorted(T const& arr) 54 { 55 std::vector<int> originSequence = PmergeMe::getSequence(); 56 if (originSequence.size() != arr.size()) 57 { 58 return false; 59 } 60 61 std::sort(originSequence.begin(), originSequence.end()); 62 63 for (size_t i = 0; i < originSequence.size(); i++) 64 { 65 if (originSequence[i] != arr[i]) 66 { 67 return false; 68 } 69 } 70 71 return true; 72 } 73 74 #endif /* __PMERGEME_HPP__ */ 75